{"version":3,"sources":["webpack:///./src/styling/header.scss?0004","webpack:///./node_modules/moment/locale sync [/\\\\](nl(\\.js)","webpack:///./src/styling/general.scss?4852","webpack:///./src/styling/general.scss","webpack:///./src/icons.ts","webpack:///./src/styling/header.scss","webpack:///./src/styling/login.scss?2b58","webpack:///./src/styling/login.scss","webpack:///./src/components/date-picker/date-picker.scss?90de","webpack:///./src/components/date-picker/date-picker.scss","webpack:///./src/components/avatar/avatar.scss?9f9e","webpack:///./src/components/avatar/avatar.scss","webpack:///./src/components/school-row/content.scss?c471","webpack:///./src/components/school-row/content.scss","webpack:///./src/styling/overlays.scss?5228","webpack:///./src/styling/overlays.scss","webpack:///./src/store/persistance-config.ts","webpack:///./src/store/timetable/state.ts","webpack:///./src/store/decorators.ts","webpack:///./src/store/action.ts","webpack:///./src/store/ui/state.ts","webpack:///./src/store/timetable/actions.ts","webpack:///./src/store/timetable/reducer.ts","webpack:///./src/store/authentication/state.ts","webpack:///./src/store/ui/actions.ts","webpack:///./src/utils/object-utils.ts","webpack:///./src/store/ui/reducer.ts","webpack:///./src/store/authentication/actions.ts","webpack:///./src/networking/network-utils.ts","webpack:///./src/store/status.ts","webpack:///./src/store/authentication/reducer.ts","webpack:///./src/store/general/actions.ts","webpack:///./src/store/general/reducer.ts","webpack:///./src/store/epic-helper.ts","webpack:///./src/store/authentication/epics.ts","webpack:///./src/store/ui/selectors.ts","webpack:///./src/store/general/selectors.ts","webpack:///./src/store/timetable/selectors.ts","webpack:///./src/store/timetable/epics.ts","webpack:///./src/store/ui/epics.ts","webpack:///./src/store/general/epics.ts","webpack:///./src/store/epics.ts","webpack:///./src/networking/location-service.ts","webpack:///./src/networking/account-service.ts","webpack:///./src/store/authentication/selectors.ts","webpack:///./src/store/dependencies.ts","webpack:///./src/networking/authorization-interceptor.ts","webpack:///./src/store/reducers.ts","webpack:///./src/store/configure-store.ts","webpack:///./src/language-provider.tsx","webpack:///./src/components/button.tsx","webpack:///./src/screens/login.tsx","webpack:///./src/components/call-link/call-link.tsx","webpack:///./src/components/date-picker/date-picker.tsx","webpack:///./src/constants/colors.ts","webpack:///./src/utils/child-status.ts","webpack:///./src/components/avatar/avatar.tsx","webpack:///./src/components/school-row/child-row.tsx","webpack:///./src/components/school-row/school-row.tsx","webpack:///./src/components/logout/logout.tsx","webpack:///./src/components/refresh-button.tsx","webpack:///./src/screens/home.tsx","webpack:///./src/router/react-router-hooks.ts","webpack:///./src/screens/child-details.tsx","webpack:///./src/app-router.tsx","webpack:///./src/secrets-listener.ts","webpack:///./src/components/new-version.tsx","webpack:///./src/react/hooks.ts","webpack:///./src/environment-mode.ts","webpack:///./src/components/developer-console.tsx","webpack:///./src/app-component.tsx","webpack:///./src/font-awesome.ts","webpack:///./src/index.tsx"],"names":["api","content","__esModule","default","module","i","options","exported","locals","exports","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","___CSS_LOADER_API_IMPORT___","push","needsChange","value","isMoment","isDuration","performChange","duration","transformMomentJS","object","transform","hasChanges","key","Array","isArray","clonedArray","length","arrayResult","changed","splice","result","Status","persistConfig","transforms","x","storage","blacklist","target","methodName","propertyDesciptor","className","console","error","apply","this","args","type","container","action","__actionName","Action","payload","isActionFromContainer","__className","FilterTypes","EntriesType","loadInitialInfo","date","loadInitialInfoSuccess","hasRides","location","loadInitialInfoFailed","loadTimeTables","loadEmployeeTimeTables","loadEmployeeTimeTablesSuccess","times","schools","children","vehicles","rides","loadEmployeeTimeTablesFailed","loadLocationTimeTables","loadLocationTimeTablesSuccess","loadLocationTimeTablesFailed","clear","Date","Location","initialState","status","Init","timeTableReducer","state","LoadingInitialInfo","LoadedInitialInfo","undefined","FailedLoadingInitialInfo","LoadingTimeTable","LoadedTimeTable","FailedLoadingTimeTable","selectDate","setHours","selectFilter","filter","selectEntries","entriesType","isPresent","time","child","school","format","isAbsent","toggleTerminal","Moment","isEquivalent","a","b","except","aProps","getOwnPropertyNames","bProps","propName","includes","equ","ObjectUtils","selectedDate","now","selectedFilter","None","selectedEntries","Employee","presentChildren","terminalVisible","uiReducer","developMode","configureForLocal","apiUrl","configureForProduction","tenant","signOut","login","userName","password","loginSuccess","response","loginFailed","renewToken","TokenModel","getQueryParam","param","match","regex","search","window","href","toLowerCase","exec","queryParam","queryValue","getTenant","url","origin","Unauthenticated","reducer","Authenticating","Authenticated","expires","accessToken","refreshToken","AuthenticationFailed","applicationStart","fetchEmployees","locationId","fetchEmployeesSuccess","employees","fetchEmployeesFailed","applicationStarted","Loading","actionOf","pipe","action$","operator","successHandler","errorHandler","mergeMap","promise","from","catch","isAxiosError","data","arg","states$","accountService","signIn","axios","message","description","uiSelector","presenceSelector","selectedDateSelector","selectedFilterSelector","selectedEntriesSelector","terminalVisibleSelector","employeesSelector","general","statusSelector","timeTable","timesSelector","schoolsSelector","childrenSelector","vehiclesSelector","ridesSelector","locationSelector","createChild","presences","currentDate","timeSchool","presentRecord","find","p","childId","schoolId","createTimeTableEntry","flatMap","entries","rideId","ride","vehicle","v","vehicleId","timeChildren","employee","c","some","employeeId","childIds","s","createSchoolEntries","getTimeTable","getFilteredTimeTable","timeTableEntries","entry","isDropOff","Bring","Fetch","filterTimes","mapTo","ui","locationService","fetchInitialInfo","fetchTimeTableForEmployee","fetchTimeTableForLocation","combineEpics","baseUri","fetch","get","path","URL","toString","username","config","auth","me","headers","Authorization","authSelector","tenantSelector","accessTokenSelector","refreshTokenSelector","authenticationStatusSelector","developModeSelector","apiUrlSelector","createDependencies","createdInterceptors","nextRequestId","history","appReducer","epicMiddleware","createEpicMiddleware","dependencies","composeEnhancers","trace","middlewares","next","authSuccessAction","defaults","common","getState","interceptors","use","_requestId","endsWith","dispatch","Promise","reject","then","adapter","requestId","setRetryRequestId","router","authentication","persistor","run","languages","name","useTranslate","Button","props","translate","translatedTooltip","tooltipTranslation","translatedText","translation","icon","Wrapper","title","create","getFieldDecorator","getFieldValue","validateFields","requiredField","field","rules","required","authenticationStatus","style","width","background","onSubmit","event","preventDefault","errors","values","newTenant","customTenant","environment","bind","Item","initialValue","defaultActiveFirstOption","Option","placeholder","prefix","color","xs","valuePropName","loading","htmlType","textAlign","hidden","CallLink","phoneNumber","size","link","fontSize","DatePicker","setCurrentDate","currentDateDisplay","setCurrentDateDisplay","converted","current","onClick","clone","subtract","display","float","add","Colors","expected","notExpected","absent","sick","present","determineChildStatus","timeOfDay","childTimes","statuses","sort","asMilliseconds","childTime","Avatar","picture","large","gender","faMars","faVenus","faGenderless","genderIcon","extraClasses","src","iconName","AvatarStatus","useTableEntry","effectiveStatus","backgroundColor","ChildRow","navigationState","to","pathname","margin","childName","SchoolStatusIndicator","allPickedUp","setAllPickedUp","totalExpectedChildren","setTotalExpectedChildren","totalExpected","totalExpectedSet","totalOtherSet","TableEntryContext","createContext","useContext","SchoolRow","childRows","comment","Provider","Logout","RefreshButton","createActionSheet","cancelButtonIndex","maskClosable","HomeFilters","showActionSheetWithOptions","index","filterIndexToType","HomeHeader","locationName","HomeScreen","MessageContainer","dataSource","itemLayout","renderItem","div","useRouter","Header","goBack","emergencyNumber","schoolClass","Plannings","plannings","marginBottom","startTime","endTime","groupId","group","ChildDetailsScreen","navigate","replace","AppRouter","routes","exact","component","isRedirect","atEnter","opacity","atLeave","atActive","command","NewVersion","init","cleanup","initialized","newServiceWorker","setNewServiceWorker","navigator","serviceWorker","register","registration","refreshing","setInterval","waiting","addEventListener","newWorker","installing","controller","reload","log","Container","Text","postMessage","EnvironmentMode","DeveloperConsole","store","commands","usage","fn","mode","atIndex","indexOf","slice","signout","version","dangerMode","autoFocus","welcomeMessage","promptLabel","AppComponent","isTerminalVisible","faHome","faCalendarAlt","faHourglassHalf","faUserPlus","faLongArrowAltUp","faLongArrowAltDown","faSignOutAlt","faBatteryThreeQuarters","development","height","DeveloperConsoleContainer","secrets","lookup","pressedKeys","letters","timer","Secret","purge","reduce","acc","cur","split","onkeyup","clearTimeout","setTimeout","pressedKey","shiftKey","GetPressedKey","join","rootElement","document","getElementById","Root","render","languageContext","setActiveLanguage","activeLanguage","language","locale","initialize","renderToStaticMarkup","addTranslationForLanguage","l"],"mappings":"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","file":"main.c920b4ddeb9b68365139.js","sourcesContent":["var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/mini-css-extract-plugin/dist/loader.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./header.scss\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\nvar exported = content.locals ? content.locals : {};\n\n\n\nmodule.exports = exported;","var map = {\n\t\"./nl\": 133,\n\t\"./nl.js\": 133\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 310;","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/mini-css-extract-plugin/dist/loader.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./general.scss\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\nvar exported = content.locals ? content.locals : {};\n\n\n\nmodule.exports = exported;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","export { default as UserOutline } from '@ant-design/icons/lib/outline/UserOutline';\nexport { default as LockOutline } from '@ant-design/icons/lib/outline/LockOutline';\nexport { default as LogoutOutline } from '@ant-design/icons/lib/outline/LogoutOutline';\nexport { default as SyncOutline } from '@ant-design/icons/lib/outline/SyncOutline';\nexport { default as PhoneOutline } from '@ant-design/icons/lib/outline/PhoneOutline';\nexport { default as ArrowLeftOutline } from '@ant-design/icons/lib/outline/ArrowLeftOutline';\nexport { default as ArrowRightOutline } from '@ant-design/icons/lib/outline/ArrowRightOutline';\nexport { default as CloseOutline } from '@ant-design/icons/lib/outline/CloseOutline';\n","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/mini-css-extract-plugin/dist/loader.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./login.scss\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\nvar exported = content.locals ? content.locals : {};\n\n\n\nmodule.exports = exported;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./date-picker.scss\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\nvar exported = content.locals ? content.locals : {};\n\n\n\nmodule.exports = exported;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./avatar.scss\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\nvar exported = content.locals ? content.locals : {};\n\n\n\nmodule.exports = exported;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!../../../node_modules/mini-css-extract-plugin/dist/loader.js!../../../node_modules/css-loader/dist/cjs.js!../../../node_modules/sass-loader/dist/cjs.js!./content.scss\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\nvar exported = content.locals ? content.locals : {};\n\n\n\nmodule.exports = exported;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var api = require(\"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = require(\"!!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!../../node_modules/mini-css-extract-plugin/dist/loader.js!../../node_modules/css-loader/dist/cjs.js!../../node_modules/sass-loader/dist/cjs.js!./overlays.scss\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.id, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\nvar exported = content.locals ? content.locals : {};\n\n\n\nmodule.exports = exported;","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\", \"\"]);\n// Exports\nmodule.exports = exports;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { createTransform, PersistConfig } from 'redux-persist';\nimport storage from 'redux-persist/lib/storage/index.js';\nimport moment from 'moment';\nimport { ApplicationState } from './application-state';\n\ninterface MomentJSTransform {\n needsChange(value: any): boolean;\n performChange(value: any): any;\n}\n\nclass MomentJSSerializeTransform implements MomentJSTransform {\n public needsChange(value: any): boolean {\n return moment.isMoment(value) || moment.isDuration(value);\n }\n\n public performChange(value: any): any {\n if (moment.isMoment(value)) {\n return {\n isMoment: true,\n value: value\n };\n } else if (moment.isDuration(value)) {\n return {\n isDuration: true,\n value: value\n };\n }\n }\n}\n\nclass MomentJSDeserializeTransform implements MomentJSTransform {\n public needsChange(value: any): boolean {\n return value.isMoment === true || value.isDuration === true;\n }\n\n public performChange(value: any): any {\n if (value.isMoment === true) {\n return moment(value.value);\n } else if (value.isDuration === true) {\n return moment.duration(value.value);\n }\n }\n}\n\nfunction transformMomentJS(object: T, transform: MomentJSTransform): { changed: boolean; value: T } {\n\n let hasChanges = false;\n\n for (const key of Object.keys(object)) {\n const value = object[key];\n if (value == null || typeof value !== 'object') {\n continue;\n }\n\n if (Array.isArray(value)) {\n let clonedArray = value;\n for (let i = 0; i < value.length; i++) {\n if (typeof value[i] !== 'object') {\n break;\n }\n\n const arrayResult = transformMomentJS(value[i], transform);\n if (arrayResult.changed === true) {\n if (hasChanges === false) {\n object = { ...object };\n }\n\n if (clonedArray === value) {\n clonedArray = [...value];\n }\n\n hasChanges = true;\n clonedArray.splice(i, 1, arrayResult.value);\n }\n }\n\n object[key] = clonedArray;\n\n continue;\n }\n \n const result = transformMomentJS(value, transform);\n if (result.changed) {\n if (hasChanges === false) {\n object = { ...object };\n }\n\n hasChanges = true;\n object[key] = result.value;\n continue;\n }\n \n if (transform.needsChange(value) === false) {\n continue;\n }\n\n if (hasChanges === false) {\n object = { ...object };\n }\n\n hasChanges = true;\n \n object[key] = transform.performChange(value);\n }\n\n return { changed: hasChanges, value: object };\n}\n\nconst momentjsTransform = createTransform(\n x => transformMomentJS(x, new MomentJSSerializeTransform()).value, \n x => transformMomentJS(x, new MomentJSDeserializeTransform()).value\n);\n\nexport const persistConfig: PersistConfig = {\n transforms: [momentjsTransform],\n key: 'root',\n storage: storage,\n blacklist: ['router', 'timeTable']\n};","import {ChildCare} from '@/networking/models';\nimport { GenericError } from '../generic-error';\n\ntype TransportVehicle = ChildCare.Definitions.Transport.Models.TransportVehicle;\ntype Location = ChildCare.Definitions.Locations.Models.Location;\ntype TransportTime = ChildCare.Definitions.Transport.Models.TransportTime;\ntype TransportSchool = ChildCare.Definitions.Transport.Models.TransportSchool;\ntype TransportChild = ChildCare.Definitions.Transport.Models.TransportChild;\ntype TransportRide = ChildCare.Definitions.Transport.Models.TransportRide;\n\nexport enum Status {\n Init = 'Init',\n LoadingInitialInfo = 'Loading initial info',\n LoadedInitialInfo = 'Loaded initial info',\n FailedLoadingInitialInfo = 'Failed loading initial info',\n LoadingTimeTable = 'Loading time table',\n LoadedTimeTable = 'Loaded time table',\n FailedLoadingTimeTable = 'Failed loading time table'\n}\n\nexport interface TimeTableState {\n status: Status;\n error?: GenericError;\n\n date?: Date;\n location?: Location;\n hasRides: boolean;\n times: TransportTime[];\n schools: TransportSchool[];\n children: TransportChild[];\n vehicles: TransportVehicle[];\n rides: TransportRide[];\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Action } from './action';\n\nexport function action(target: Object, methodName: string, propertyDesciptor: PropertyDescriptor): PropertyDescriptor {\n const className = target['__className'];\n \n if (className == null) {\n console.error('The \\'public static __className = nameof(\\'\\');\\' Must be present in the class of method \\'' + methodName + '\\''); \n } else {\n const actionName = `${target['__className']}:${methodName}`;\n \n const method = propertyDesciptor.value;\n\n propertyDesciptor.value = function (...args: any[]) {\n const result = method.apply(this, args) as Action;\n\n // Always set the action to the calculated value\n result.type = actionName;\n result.container = className;\n result.action = methodName;\n\n return result;\n };\n\n propertyDesciptor.value.__actionName = actionName;\n }\n\n return propertyDesciptor;\n}","export function Action(action: T, payload?: P): Action {\n return { type: '', container: '', action, payload };\n}\n\nexport interface Action {\n type: string;\n container: string;\n action: T;\n payload: P;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isActionFromContainer(action: Action, container: { __className: string }): boolean {\n return action.container === container.__className;\n}","import moment from 'moment';\n\nexport enum FilterTypes {\n Bring = 'Brengen',\n Fetch = 'Ophalen',\n None = 'Alle tijden'\n}\n\nexport enum EntriesType {\n Employee = 'Medewerker',\n Location = 'Locatie'\n}\n\nexport interface UIState {\n selectedDate: Date;\n selectedFilter: FilterTypes;\n selectedEntries: EntriesType;\n presentChildren: ChildPresenceState[];\n terminalVisible: boolean;\n}\n\nexport interface ChildPresenceState {\n date: string;\n time: string;\n child: string;\n school: string;\n isPresent: boolean;\n}\n","/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport { ChildCare } from '@/networking/models';\nimport { action } from '../decorators';\nimport { GenericError } from '../generic-error';\nimport { Action } from '../action';\nimport { ActionsUnion } from '../types';\n\ntype TransportVehicle = ChildCare.Definitions.Transport.Models.TransportVehicle;\ntype Location = ChildCare.Definitions.Locations.Models.Location;\ntype TransportTime = ChildCare.Definitions.Transport.Models.TransportTime;\ntype TransportSchool = ChildCare.Definitions.Transport.Models.TransportSchool;\ntype TransportChild = ChildCare.Definitions.Transport.Models.TransportChild;\ntype TransportRide = ChildCare.Definitions.Transport.Models.TransportRide;\n\nexport class TimeTableActions {\n public static __className = 'TimeTableActions';\n\n @action\n static loadInitialInfo(date: Date) { return Action('loadInitialInfo', { date }); }\n @action\n static loadInitialInfoSuccess(hasRides: boolean, location: Location) { return Action('loadInitialInfoSuccess', { hasRides, location }); }\n @action\n static loadInitialInfoFailed(error: GenericError) { return Action('loadInitialInfoFailed', { error }); }\n @action\n static loadTimeTables() { return Action('loadTimeTables'); }\n @action\n static loadEmployeeTimeTables() { return Action('loadEmployeeTimeTables'); }\n @action\n static loadEmployeeTimeTablesSuccess(date: Date, times: TransportTime[], schools: TransportSchool[], children: TransportChild[], vehicles: TransportVehicle[], rides: TransportRide[]) { return Action('loadEmployeeTimeTablesSuccess', { date, times, schools, children, vehicles, rides }); }\n @action\n static loadEmployeeTimeTablesFailed(error: GenericError) { return Action('loadEmployeeTimeTablesFailed', { error }); }\n @action\n static loadLocationTimeTables() { return Action('loadLocationTimeTables'); }\n @action\n static loadLocationTimeTablesSuccess(date: Date, times: TransportTime[], schools: TransportSchool[], children: TransportChild[], vehicles: TransportVehicle[], rides: TransportRide[]) { return Action('loadLocationTimeTablesSuccess', { date, times, schools, children, vehicles, rides }); }\n @action\n static loadLocationTimeTablesFailed(error: GenericError) { return Action('loadLocationTimeTablesFailed', { error }); }\n @action\n static clear() { return Action('clear'); }\n}\n\nexport type Actions = ActionsUnion;","import { Status, TimeTableState } from './state';\nimport { Actions, TimeTableActions } from '@/store/timetable/actions';\nimport { isActionFromContainer } from '../action';\n\nconst initialState: TimeTableState = {\n status: Status.Init,\n hasRides: false,\n children: [],\n schools: [],\n times: [],\n vehicles: [],\n rides: []\n};\n\nexport const timeTableReducer = (state: TimeTableState = initialState, action: Actions): TimeTableState => {\n if (!isActionFromContainer(action, TimeTableActions)) {\n return state;\n }\n \n switch (action.action) {\n case 'loadInitialInfo':\n return {\n ...state,\n status: Status.LoadingInitialInfo\n };\n case 'loadInitialInfoSuccess':\n return {\n ...state,\n status: Status.LoadedInitialInfo,\n hasRides: action.payload.hasRides,\n location: action.payload.location,\n error: undefined\n };\n case 'loadInitialInfoFailed':\n return {\n ...state,\n status: Status.FailedLoadingInitialInfo,\n error: action.payload.error\n };\n case 'loadEmployeeTimeTables':\n case 'loadLocationTimeTables':\n return {\n ...state,\n status: Status.LoadingTimeTable\n };\n case 'loadEmployeeTimeTablesSuccess':\n case 'loadLocationTimeTablesSuccess':\n return {\n ...state,\n status: Status.LoadedTimeTable,\n date: new Date(action.payload.date),\n times: action.payload.times,\n schools: action.payload.schools,\n children: action.payload.children,\n vehicles: action.payload.vehicles,\n rides: action.payload.rides,\n error: undefined\n };\n case 'loadEmployeeTimeTablesFailed':\n case 'loadLocationTimeTablesFailed':\n return {\n ...state,\n status: Status.FailedLoadingTimeTable,\n error: action.payload.error\n };\n case 'clear':\n return { ...initialState };\n default:\n return state;\n }\n};","import { GenericError } from '@/store/generic-error';\nimport { Moment } from 'moment';\n\nexport enum Status {\n Unauthenticated = 'Unauthenticated',\n Authenticating = 'Authenticating',\n Authenticated = 'Authenticated',\n AuthenticationFailed = 'AuthenticationFailed'\n}\n\nexport interface State {\n status: Status;\n tenant: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n error?: GenericError;\n accessToken?: string;\n expires?: Moment;\n refreshToken?: string;\n apiUrl: string;\n developMode: boolean;\n}\n","/* eslint-disable @typescript-eslint/explicit-member-accessibility */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\n\nimport {ActionsUnion} from '@/store/types';\nimport {FilterTypes, EntriesType} from '@/store/ui/state';\nimport moment from 'moment';\nimport { Action } from '../action';\nimport { action } from '../decorators';\n\nexport class UIActions {\n public static __className = 'UIActions';\n \n @action\n static selectDate(date: Date) { return Action('selectDate', { date: new Date(date.setHours(0, 0, 0, 0)) }); }\n @action\n static selectFilter(filter: FilterTypes) { return Action('selectFilter', { filter }); }\n @action\n static selectEntries(entriesType: EntriesType) { return Action('selectEntries', { entriesType }); }\n @action\n static isPresent(date: moment.Moment, time: string, child: string, school: string) { return Action('isPresent', { date: date.format('YYYY-MM-DD'), time, child, school, isPresent: true }); }\n @action\n static isAbsent(date: moment.Moment, time: string, child: string, school: string) { return Action('isAbsent', { date: date.format('YYYY-MM-DD'), time, child, school, isPresent: false }); }\n\n @action\n static toggleTerminal() { return Action('toggleTerminal'); }\n}\n\nexport type Actions = ActionsUnion;","export class ObjectUtils {\n public static isEquivalent(a, b, except: string[] = null): boolean {\n // Create arrays of property names\n const aProps = Object.getOwnPropertyNames(a);\n const bProps = Object.getOwnPropertyNames(b);\n\n // If number of properties is different,\n // objects are not equivalent\n if (aProps.length !== bProps.length) {\n return false;\n }\n\n for (let i = 0; i < aProps.length; i++) {\n const propName = aProps[i];\n\n if (except && except.includes(propName)) {\n continue;\n }\n\n // If values of same property are not equal,\n // objects are not equivalent\n if (a[propName] !== b[propName]) {\n return false;\n }\n }\n\n // If we made it this far, objects\n // are considered equivalent\n return true;\n }\n}","import {Actions, UIActions} from '@/store/ui/actions';\nimport {FilterTypes, UIState, EntriesType} from '@/store/ui/state';\nimport {ObjectUtils} from '@/utils/object-utils';\nimport { isActionFromContainer } from '../action';\n\nconst equ = ObjectUtils.isEquivalent;\n\nconst initialState: UIState = {\n selectedDate: new Date(Date.now()),\n selectedFilter: FilterTypes.None,\n selectedEntries: EntriesType.Employee,\n presentChildren: [],\n terminalVisible: false\n};\n\nexport const uiReducer = (state: UIState = initialState, action: Actions): UIState => {\n if (!isActionFromContainer(action, UIActions)) {\n return state;\n }\n \n switch (action.action) {\n case 'selectDate':\n return { ...state, selectedDate: action.payload.date };\n case 'selectFilter':\n return { ...state, selectedFilter: action.payload.filter };\n case 'selectEntries':\n return { ...state, selectedEntries: action.payload.entriesType };\n\n case 'isAbsent':\n case 'isPresent':\n return {\n ...state,\n presentChildren: [...state.presentChildren.filter(x => !equ(x, action.payload, ['isPresent'])), action.payload]\n };\n\n case 'toggleTerminal':\n return {...state, terminalVisible: !state.terminalVisible};\n default:\n return state;\n }\n};","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport { Action } from '@/store/action';\nimport { ChildCare } from '@/networking/models';\nimport { GenericError } from '@/store/generic-error';\nimport { action } from '@/store/decorators';\nimport { ActionsUnion } from '../types';\n\ntype TokenModel = ChildCare.Definitions.Account.TokenModel;\n\nexport class AuthenticationActions {\n public static __className = 'AuthenticationActions';\n\n @action\n static developMode() { return Action('developMode'); }\n @action\n static configureForLocal() { return Action('configureForLocal', { apiUrl: 'http://localhost:5010' }); }\n @action\n static configureForProduction(tenant: string) { return Action('configureForProduction', { apiUrl: `https://backoffice-${tenant}.kindplanner.nl` }); }\n\n @action\n static tenant(tenant: string) { return Action('tenant', { tenant }); }\n @action\n static signOut() { return Action('signOut'); }\n\n @action\n static login(userName: string, password: string) { return Action('login', { userName, password }); }\n @action\n static loginSuccess(response: TokenModel) { return Action('loginSuccess', { ...response }); }\n @action\n static loginFailed(error: GenericError) { return Action('loginFailed', { error }); }\n\n @action\n static renewToken(response: TokenModel) { return Action('renewToken', { ...response }); }\n}\n\nexport type Actions = ActionsUnion;","export function getTenantFromUrl(url: string): string | null {\n const tenantRegex = /(?:(?:groep|backoffice|ouder|activiteiten|vervoer)-)?([a-z-0-9]+)\\.kindplanner.nl/i;\n const match = tenantRegex.exec(url);\n if (match != null) {\n return match[1];\n }\n\n return null;\n}\n\nexport function getBackOfficeUrl(tenant: string): string {\n return `https://backoffice-${tenant}.kindplanner.nl/`;\n}\n\nexport function getQueryParam(param: string): string {\n const regex = /([a-z]+)=([a-z0-9:/.-]+)/ig;\n const search = window.location.href;\n param = param.toLowerCase();\n\n let match: RegExpExecArray;\n\n do {\n match = regex.exec(search);\n if (match != null) {\n const queryParam = match[1]?.toLowerCase();\n const queryValue = match[2];\n if (queryParam === param) {\n return queryValue;\n }\n }\n } while (match != null);\n\n return null;\n}\n\nexport function getTenant(): string {\n let tenant = getTenantFromUrl(window.location.origin);\n\n if (tenant == null) {\n tenant = getQueryParam('tenant');\n }\n\n return tenant;\n}\n\nexport function getApiEndpoint(): string {\n const tenant = getTenant();\n\n let endpoint = getQueryParam('api');\n\n if (endpoint == null) {\n endpoint = getBackOfficeUrl(tenant);\n }\n\n if (!endpoint.endsWith('/')) {\n endpoint += '/';\n }\n\n return endpoint;\n}","export enum Status {\n Init = 'Init',\n Loading = 'Loading',\n Loaded = 'Loaded',\n Error = 'Error'\n}\n","import { Status, State } from './state';\nimport { Actions, AuthenticationActions } from './actions';\nimport moment from 'moment';\nimport { isActionFromContainer } from '../action';\nimport { getTenant } from '@/networking/network-utils';\n\nconst initialState: State = {\n status: Status.Unauthenticated,\n tenant: getTenant() ?? 'ontwikkel',\n developMode: false,\n apiUrl: 'https://backoffice-ontwikkel.kindplanner.nl',\n};\n\nexport const reducer = (state = initialState, action: Actions): State => {\n if (!isActionFromContainer(action, AuthenticationActions)) {\n return state;\n }\n\n switch (action.action) {\n case 'tenant': return { ...state, tenant: action.payload.tenant };\n case 'login':\n return { ...state, status: Status.Authenticating };\n case 'loginSuccess':\n return {\n ...state,\n status: Status.Authenticated,\n expires: moment(action.payload.expires),\n accessToken: action.payload.accessToken,\n refreshToken: action.payload.refreshToken,\n error: undefined\n };\n case 'loginFailed':\n return { ...state, status: Status.AuthenticationFailed, error: action.payload.error };\n case 'renewToken':\n return {\n ...state,\n expires: moment(action.payload.expires),\n accessToken: action.payload.accessToken,\n refreshToken: action.payload.refreshToken\n };\n\n case 'developMode': return { ...state, developMode: true };\n\n case 'configureForLocal':\n case 'configureForProduction':\n return { ...state, apiUrl: action.payload.apiUrl };\n\n default:\n return state;\n }\n};","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport { Action } from '@/store/action';\nimport { action } from '../decorators';\nimport { ActionsUnion } from '../types';\nimport { ChildCare } from '@/networking/models';\nimport { GenericError } from '../generic-error';\n\nexport class GeneralActions {\n public static __className = 'GeneralActions';\n\n @action\n static applicationStart() { return Action('applicationStart'); }\n\n @action\n static fetchEmployees(date: Date, locationId: string) { return Action('fetchEmployees', { date, locationId }); }\n @action\n static fetchEmployeesSuccess(employees: ChildCare.Definitions.Locations.Models.Employee[]) { return Action('fetchEmployeesSuccess', { employees }); }\n @action\n static fetchEmployeesFailed(error: GenericError) { return Action('fetchEmployeesFailed', { error }); }\n}\n\nexport type Actions = ActionsUnion;","import { State } from './state';\nimport { Actions, GeneralActions } from './actions';\nimport { isActionFromContainer } from '../action';\nimport { Status } from '../status';\n\nconst initialState: State = {\n applicationStarted: false,\n status: Status.Init,\n employees: []\n};\n\nexport const reducer = (state = initialState, action: Actions): State => {\n if (!isActionFromContainer(action, GeneralActions)) {\n return state;\n }\n\n switch (action.action) {\n\n case 'applicationStart': return { ...state, applicationStarted: true };\n \n case 'fetchEmployees':\n return {\n ...state,\n status: Status.Loading,\n error: undefined\n };\n case 'fetchEmployeesSuccess':\n return { ...state, status: undefined, employees: action.payload.employees };\n case 'fetchEmployeesFailed':\n return { ...state, status: Status.Error, error: action.payload.error };\n default:\n return state;\n }\n};","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-ts-ignore */\n\nimport { AxiosPromise, AxiosResponse, AxiosError } from 'axios';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { Observable, from, OperatorFunction } from 'rxjs';\nimport { ActionsObservable, ofType, Epic } from 'redux-observable';\nimport { AnyAction } from 'redux';\nimport { Action } from './action';\nimport { ApplicationState } from './application-state';\nimport { Dependencies } from './dependencies';\n\nexport type GenericEpic = Epic;\nexport type ErrorHandler> = (action: A, error: AxiosError) => AnyAction;\n\nexport type SuccessHandler = (response: T, payload: P) => AnyAction;\n\nexport function isResponse

(arg: any): arg is AxiosResponse

{\n return arg.status !== undefined;\n}\n\nexport function isAxiosError(arg: any): arg is AxiosError {\n return arg.code !== undefined || arg.response !== undefined || (arg.isAxiosError !== undefined && arg.isAxiosError);\n}\n\nexport function handleResponse

(promise: AxiosPromise

): Observable

{\n return from(promise.catch(error => ({ isAxiosError: true, ...error }) as AxiosError))\n .pipe(\n map(response => {\n if (response && isResponse(response)) {\n if (response.status >= 200 && response.status <= 299) {\n return response.data;\n }\n\n return { response } as AxiosError;\n }\n\n return response as AxiosError;\n })\n );\n}\n\nexport type NonUndefined = A extends undefined ? never : A;\nexport type FunctionKeys = {\n [K in keyof T]-?: NonUndefined extends Function ? K : never\n}[keyof T];\n\nexport function actionOf any>(target: T): ReturnType {\n // @ts-ignore\n return { type: target.__actionName } as ReturnType;\n}\n\ntype PromiseOperator = (action: A) => AxiosPromise;\ntype OperatorOrPromise = OperatorFunction | PromiseOperator;\n\nexport function pipe>(action$: ActionsObservable, action: A, operator: (action: A) => AxiosPromise, successHandler: SuccessHandler, errorHandler: ErrorHandler): Observable;\nexport function pipe>(action$: ActionsObservable, action: A, operator: OperatorFunction): Observable;\nexport function pipe>(action$: ActionsObservable, action: A, operator: OperatorOrPromise, successHandler?: SuccessHandler, errorHandler?: ErrorHandler): Observable {\n if (successHandler != null && errorHandler != null) {\n return action$.pipe(\n ofType(action.type),\n mergeMap((action: A) => handleResponse((operator as PromiseOperator)(action)), (action, response) => ({ action, response })),\n map(({ action, response }) => {\n if (isAxiosError(response)) {\n return errorHandler(action, response);\n }\n \n return successHandler(response, action.payload);\n })\n );\n } else {\n return action$.pipe(\n ofType(action.type),\n operator as OperatorFunction\n );\n } \n}","import { push } from 'connected-react-router';\nimport { GenericEpic, actionOf, pipe } from '../epic-helper';\nimport { AuthenticationActions } from './actions';\nimport { map } from 'rxjs/operators';\n\nconst loginEpic: GenericEpic = (action$, states$, { accountService }) => {\n return pipe(\n action$,\n actionOf(AuthenticationActions.login),\n action => accountService(states$.value).signIn(action.payload.userName, action.payload.password),\n response => AuthenticationActions.loginSuccess(response),\n (action, error) => AuthenticationActions.loginFailed({\n action,\n axios: error,\n message: 'Login failed',\n description: 'A problem occurred while trying to login'\n }));\n};\n\nconst loginSuccessEpic: GenericEpic = action$ => {\n return pipe(\n action$,\n actionOf(AuthenticationActions.loginSuccess),\n map(() => push('/'))\n );\n};\n\nexport default [\n loginEpic,\n loginSuccessEpic,\n];","import { ApplicationState } from '@/store/application-state';\nimport { createSelector } from 'reselect';\n\nexport const uiSelector = createSelector((state: ApplicationState) => state, x => x.ui);\nexport const presenceSelector = createSelector(uiSelector, x => x.presentChildren);\nexport const selectedDateSelector = createSelector(uiSelector, x => x.selectedDate);\nexport const selectedFilterSelector = createSelector(uiSelector, x => x.selectedFilter);\nexport const selectedEntriesSelector = createSelector(uiSelector, x => x.selectedEntries);\nexport const terminalVisibleSelector = createSelector(uiSelector, x => x.terminalVisible);\n","import { ApplicationState } from '@/store/application-state';\nimport { createSelector } from 'reselect';\n\nexport const applicationStartedSelector = createSelector((state: ApplicationState) => state.general?.applicationStarted, x => x);\nexport const employeesSelector = createSelector((state: ApplicationState) => state.general.employees, x => x);","import { createSelector } from 'reselect';\nimport { ApplicationState } from '@/store/application-state';\nimport { ChildCare } from '@/networking/models';\nimport { selectedDateSelector, presenceSelector, selectedFilterSelector } from '@/store/ui/selectors';\nimport { ObjectUtils } from '@/utils/object-utils';\nimport { FilterTypes, ChildPresenceState } from '@/store/ui/state';\nimport moment from 'moment';\nimport { employeesSelector } from '../general/selectors';\n\ntype TransportVehicle = ChildCare.Definitions.Transport.Models.TransportVehicle;\ntype TransportTime = ChildCare.Definitions.Transport.Models.TransportTime;\ntype TransportSchool = ChildCare.Definitions.Transport.Models.TransportSchool;\ntype TransportTimeSchool = ChildCare.Definitions.Transport.Models.TransportTimeSchool;\ntype TransportChild = ChildCare.Definitions.Transport.Models.TransportChild;\ntype TransportRide = ChildCare.Definitions.Transport.Models.TransportRide;\ntype Employee = ChildCare.Definitions.Locations.Models.Employee;\n\nexport const dateSelector = createSelector((state: ApplicationState) => state.timeTable.date, x => x);\nexport const statusSelector = createSelector((state: ApplicationState) => state.timeTable.status, x => x);\nexport const timesSelector = createSelector((state: ApplicationState) => state.timeTable.times, x => x);\nexport const schoolsSelector = createSelector((state: ApplicationState) => state.timeTable.schools, x => x);\nexport const childrenSelector = createSelector((state: ApplicationState) => state.timeTable.children, x => x);\nexport const vehiclesSelector = createSelector((state: ApplicationState) => state.timeTable.vehicles, x => x);\nexport const ridesSelector = createSelector((state: ApplicationState) => state.timeTable.rides, x => x);\nexport const locationSelector = createSelector((state: ApplicationState) => state.timeTable.location, x => x);\n\nexport interface TimeChild extends TransportChild {\n presentRecord?: ChildPresenceState;\n}\n\nexport interface TimeTableEntry {\n time: TransportTime;\n vehicle: TransportVehicle;\n school: TransportSchool;\n ride: TransportRide;\n employee?: Employee;\n children: TimeChild[];\n}\n\nfunction createChild(child: TransportChild, presences: ChildPresenceState[], time: TransportTime, currentDate: Date, timeSchool: TransportTimeSchool): TimeChild {\n\n if (presences == null) {\n return { ...child };\n }\n\n const date = moment(currentDate).format('YYYY-MM-DD');\n\n const presentRecord = presences.find(p => ObjectUtils.isEquivalent(p, {\n time: time.time,\n date: date,\n child: child.childId,\n school: timeSchool.schoolId,\n isPresent: false\n }, ['isPresent']));\n\n return {\n ...child,\n presentRecord: presentRecord\n } as TimeChild;\n}\n\nfunction createSchoolEntries(timeSchool: TransportTimeSchool, time: TransportTime, schools: TransportSchool[], vehicles: TransportVehicle[], rides: TransportRide[], children: TransportChild[], presences: ChildPresenceState[], currentDate: Date, employees: Employee[]): TimeTableEntry[] {\n const entries = new Array();\n\n if (timeSchool.rides == null || timeSchool.rides.length === 0) {\n return entries;\n }\n\n for (const rideId of timeSchool.rides) {\n const ride = rides.find(x => x.rideId === rideId);\n const vehicle = vehicles.find(v => v.vehicleId === ride.vehicleId);\n\n let timeChildren;\n let employee: Employee;\n if (ride) { // Planned\n timeChildren = children\n .filter(c => ride.children.some(id => id === c.childId))\n .map(c => createChild(c, presences, time, currentDate, timeSchool));\n\n employee = employees.find(x => x.employeeId === ride.employeeId);\n } else { // Unplanned\n timeChildren = children\n .filter(c => timeSchool.childIds.some(id => id === c.childId))\n .map(c => createChild(c, presences, time, currentDate, timeSchool));\n }\n\n entries.push({\n time: time,\n school: schools.find(s => s.schoolId === timeSchool.schoolId),\n vehicle: vehicle,\n ride: ride,\n employee: employee,\n children: timeChildren\n });\n }\n\n return entries;\n}\n\nconst createTimeTableEntry = (time: TransportTime, schools: TransportSchool[], vehicles: TransportVehicle[], rides: TransportRide[], children: TransportChild[], presences: ChildPresenceState[], currentDate: Date, employees: Employee[]): TimeTableEntry[] => {\n return time.schools.flatMap(timeSchool => createSchoolEntries(timeSchool, time, schools, vehicles, rides, children, presences, currentDate, employees));\n};\n\nexport const getTimeTable = createSelector(\n [timesSelector, schoolsSelector, childrenSelector, vehiclesSelector, ridesSelector, presenceSelector, selectedDateSelector, employeesSelector],\n (times, schools, children, vehicles, rides, presences, currentDate, employees) =>\n times.flatMap(time => createTimeTableEntry(time, schools, vehicles, rides, children, presences, currentDate, employees))\n);\n\nconst filterTimes = (entry: TimeTableEntry, filter: FilterTypes): boolean => {\n\n const isDropOff = entry.time.isDropOff;\n\n switch (filter) {\n case FilterTypes.Bring:\n return isDropOff;\n case FilterTypes.Fetch:\n return !isDropOff;\n case FilterTypes.None:\n return true;\n }\n};\n\nexport const getFilteredTimeTable = createSelector(\n [selectedFilterSelector, getTimeTable],\n (selectedFilter, timeTableEntries) => timeTableEntries.filter(x => x.children.length > 0 && filterTimes(x, selectedFilter))\n);","import { UIActions } from '@/store/ui/actions';\nimport { map, mapTo } from 'rxjs/operators';\nimport { AnyAction } from 'redux';\nimport { EntriesType } from '../ui/state';\n\nimport { GenericEpic, actionOf, pipe } from '../epic-helper';\nimport { Observable } from 'rxjs';\nimport { TimeTableActions } from './actions';\nimport { AuthenticationActions } from '../authentication/actions';\nimport { selectedDateSelector } from '../ui/selectors';\nimport { locationSelector } from './selectors';\n\nconst loginSuccessEpic: GenericEpic = (action$, states$) => \n pipe(\n action$,\n actionOf(AuthenticationActions.loginSuccess),\n mapTo(TimeTableActions.loadInitialInfo(states$.value.ui.selectedDate))\n );\n\nconst loadInitialInfoEpic: GenericEpic = (action$, states$, { locationService }) =>\n pipe(\n action$,\n actionOf(TimeTableActions.loadInitialInfo),\n action => locationService(states$.value).fetchInitialInfo(action.payload.date),\n response => TimeTableActions.loadInitialInfoSuccess(response.hasRides, response.location),\n (action, error) => TimeTableActions.loadInitialInfoFailed({\n action,\n axios: error,\n message: 'Login failed',\n description: 'A problem occurred while trying to login'\n }));\n\nconst setInitialFilterEpic: GenericEpic = action$ =>\n pipe(\n action$,\n actionOf(TimeTableActions.loadInitialInfoSuccess),\n map(action => {\n if (action.payload.hasRides) {\n return UIActions.selectEntries(EntriesType.Employee);\n } else {\n return UIActions.selectEntries(EntriesType.Location);\n }\n }));\n\nconst selectedEntriesTypeChangedEpic: GenericEpic = action$ =>\n pipe(\n action$,\n actionOf(UIActions.selectEntries),\n map(action => {\n if (action.payload.entriesType === EntriesType.Employee) {\n return TimeTableActions.loadEmployeeTimeTables();\n } else {\n return TimeTableActions.loadLocationTimeTables();\n }\n }));\n\nconst loadTimeTableEpic: GenericEpic = (action$, states$) =>\n pipe(\n action$,\n actionOf(TimeTableActions.loadTimeTables),\n map(() => {\n if (states$.value.ui.selectedEntries === EntriesType.Employee) {\n return TimeTableActions.loadEmployeeTimeTables();\n } else {\n return TimeTableActions.loadLocationTimeTables();\n }\n }));\n\nconst loadTimeTableForEmployeeEpic: GenericEpic = (action$, states$, { locationService }) =>\n pipe(\n action$,\n actionOf(TimeTableActions.loadEmployeeTimeTables),\n () => locationService(states$.value).fetchTimeTableForEmployee(selectedDateSelector(states$.value), locationSelector(states$.value)?.locationId),\n response => TimeTableActions.loadEmployeeTimeTablesSuccess(new Date(response.date), response.times, response.schools, response.children, response.vehicles, response.rides),\n (action, error) => TimeTableActions.loadEmployeeTimeTablesFailed({\n action,\n axios: error,\n message: 'Loading employee timetables failed',\n description: 'A problem occurred while trying to load timetables'\n }));\n\nconst loadTimeTableForLocationEpic: GenericEpic = (action$, states$, { locationService }): Observable =>\n pipe(\n action$,\n actionOf(TimeTableActions.loadLocationTimeTables),\n () => locationService(states$.value).fetchTimeTableForLocation(selectedDateSelector(states$.value), locationSelector(states$.value)?.locationId),\n response => TimeTableActions.loadLocationTimeTablesSuccess(new Date(response.date), response.times, response.schools, response.children, response.vehicles, response.rides),\n (action, error) => TimeTableActions.loadLocationTimeTablesFailed({\n action,\n axios: error,\n message: 'Loading location timetables failed',\n description: 'A problem occurred while trying to load timetables'\n }));\n\nexport default [\n loginSuccessEpic,\n loadTimeTableEpic,\n selectedEntriesTypeChangedEpic,\n loadInitialInfoEpic,\n loadTimeTableForEmployeeEpic,\n loadTimeTableForLocationEpic,\n setInitialFilterEpic\n];\n","import { TimeTableActions } from '@/store/timetable/actions';\nimport { map } from 'rxjs/operators';\nimport { GenericEpic, actionOf, pipe } from '@/store/epic-helper';\nimport { UIActions } from './actions';\n\nconst dateSelectedEpic: GenericEpic = (action$) =>\n pipe(\n action$,\n actionOf(UIActions.selectDate),\n map(() => TimeTableActions.loadTimeTables())\n );\n\nexport default [\n dateSelectedEpic\n];","import { GenericEpic, actionOf, pipe } from '../epic-helper';\nimport { GeneralActions } from './actions';\nimport { map } from 'rxjs/operators';\nimport { selectedDateSelector } from '../ui/selectors';\nimport { locationSelector } from '../timetable/selectors';\nimport { TimeTableActions } from '../timetable/actions';\nimport { UIActions } from '../ui/actions';\n\nconst fetchEmployeesEpic: GenericEpic = (action$, states$, { locationService }) => {\n return pipe(\n action$,\n actionOf(GeneralActions.fetchEmployees),\n action => locationService(states$.value).fetchEmployees(action.payload.date, action.payload.locationId),\n response => GeneralActions.fetchEmployeesSuccess(response.employees),\n (action, error) => GeneralActions.fetchEmployeesFailed({\n action,\n axios: error,\n message: 'Login failed',\n description: 'A problem occurred while trying to login'\n }));\n};\n\nconst fetchEmployeesWhenAuthenticatedEpic: GenericEpic = (action$, states$) =>\n pipe(\n action$,\n actionOf(TimeTableActions.loadInitialInfoSuccess),\n map(() => GeneralActions.fetchEmployees(selectedDateSelector(states$.value), locationSelector(states$.value)?.locationId)));\n\nconst fetchEmployeesWhenDateChangedEpic: GenericEpic = (action$, states$) =>\n pipe(\n action$,\n actionOf(UIActions.selectDate),\n map(action => GeneralActions.fetchEmployees(action.payload.date, locationSelector(states$.value)?.locationId)));\n\nexport default [\n fetchEmployeesEpic,\n fetchEmployeesWhenAuthenticatedEpic,\n fetchEmployeesWhenDateChangedEpic\n];","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {combineEpics} from 'redux-observable';\nimport authenticationEpics from '@/store/authentication/epics';\nimport timeTableEpics from '@/store/timetable/epics';\nimport uiEpics from '@/store/ui/epics';\nimport generalEpics from '@/store/general/epics';\n\nexport const epics: any = combineEpics(\n ...authenticationEpics,\n ...timeTableEpics,\n ...uiEpics,\n ...generalEpics,\n);","import { ChildCare } from '@/networking/models';\nimport Axios, { AxiosPromise } from 'axios';\nimport moment from 'moment';\n\ntype LocationsResponse = ChildCare.Definitions.Locations.Responses.LocationsResponse;\ntype TransportChildrenResponse = ChildCare.Definitions.Transport.Responses.TransportChildrenResponse;\ntype TransportResponse = ChildCare.Definitions.Transport.Responses.TransportResponse;\ntype LocationEmployeesResponse = ChildCare.Definitions.Locations.Responses.LocationEmployeesResponse;\n\nexport class LocationService {\n private baseUri: string;\n\n public constructor(baseUri: string) {\n this.baseUri = baseUri;\n }\n\n public fetch(): AxiosPromise {\n return Axios.get(this.url('api/transport/locations'));\n }\n\n public fetchTimeTableForEmployee(date: Date, locationId: string): AxiosPromise {\n const currentDate = moment(date).format('YYYY-MM-DD');\n return Axios.get(this.url(`api/transport/${locationId}/children/${currentDate}/employee`));\n }\n\n public fetchTimeTableForLocation(date: Date, locationId: string): AxiosPromise {\n const currentDate = moment(date).format('YYYY-MM-DD');\n return Axios.get(this.url(`api/transport/${locationId}/children/${currentDate}`));\n }\n\n public fetchInitialInfo(date: Date): AxiosPromise {\n const currentDate = moment(date).format('YYYY-MM-DD');\n return Axios.get(this.url(`api/transport/${currentDate}`));\n }\n\n public fetchEmployees(date: Date, locationId: string): AxiosPromise {\n const currentDate = moment(date).format('YYYY-MM-DD');\n return Axios.get(this.url(`api/transport/${locationId}/employees?date=${currentDate}`));\n }\n\n private url(path: string): string {\n return new URL(path, this.baseUri).toString();\n }\n}","import Axios, {AxiosPromise, AxiosRequestConfig} from 'axios';\nimport {ChildCare} from '@/networking/models';\n\ntype TokenModel = ChildCare.Definitions.Account.TokenModel;\n\nexport class AccountService {\n private baseUri: string;\n\n public constructor(baseUri: string) {\n this.baseUri = baseUri;\n }\n\n public signIn(username: string, password: string): AxiosPromise {\n const config: AxiosRequestConfig = {\n auth: {\n password,\n username\n }\n };\n\n return Axios.get(this.url('api/account/token'), config);\n }\n\n public me(): AxiosPromise {\n return Axios.get(this.url('api/account/validate'));\n }\n\n public refreshToken(refreshToken: string): AxiosPromise {\n const config: AxiosRequestConfig = {\n headers: {\n Authorization: `Bearer ${refreshToken}`\n }\n };\n\n return Axios.get(this.url('api/account/token'), config);\n }\n\n private url(path: string): string {\n return new URL(path, this.baseUri).toString();\n }\n}","import { ApplicationState } from '@/store/application-state';\nimport { createSelector } from 'reselect';\n\nexport const authSelector = createSelector((state: ApplicationState) => state, x => x.authentication);\nexport const tenantSelector = createSelector(authSelector, x => x.tenant);\nexport const accessTokenSelector = createSelector(authSelector, x => x.accessToken);\nexport const refreshTokenSelector = createSelector(authSelector, x => x.refreshToken);\nexport const authenticationStatusSelector = createSelector(authSelector, x => x.status);\n\nexport const developModeSelector = createSelector(authSelector, x => x.developMode);\n\nexport const apiUrlSelector = createSelector(authSelector, x => x.apiUrl);","import { LocationService } from '@/networking/location-service';\nimport { AccountService } from '@/networking/account-service';\nimport { ApplicationState } from './application-state';\nimport { apiUrlSelector } from './authentication/selectors';\n\nexport interface Dependencies {\n locationService: (state: ApplicationState) => LocationService;\n accountService: (state: ApplicationState) => AccountService;\n}\n\nexport const createDependencies = (): Dependencies => {\n return {\n locationService: (state: ApplicationState) => new LocationService(apiUrlSelector(state)),\n accountService: (state: ApplicationState) => new AccountService(apiUrlSelector(state))\n };\n};","/* eslint-disable @typescript-eslint/explicit-function-return-type */\n\nimport axios, { AxiosRequestConfig, AxiosError as InternalAxiosError } from 'axios';\nimport { Dispatch, Middleware, MiddlewareAPI } from 'redux';\nimport { ApplicationState } from '@/store/application-state';\nimport { accessTokenSelector, refreshTokenSelector } from '@/store/authentication/selectors';\nimport { createDependencies } from '@/store/dependencies';\nimport { AuthenticationActions } from '@/store/authentication/actions';\nimport { GeneralActions } from '@/store/general/actions';\n\n\ntype AxiosRequest = AxiosRequestConfig & { _requestId: number };\ntype AxiosError = Omit & { config: AxiosRequest };\n\nlet createdInterceptors = false;\n\nfunction isRetry(config: AxiosRequest): boolean {\n return config._requestId !== undefined;\n}\n\nlet nextRequestId = 0;\nfunction setRetryRequestId(config: AxiosRequest) {\n const adapter = config.adapter;\n const requestId = config._requestId || nextRequestId++;\n\n config.adapter = (config: AxiosRequest) => {\n config._requestId = requestId;\n return adapter(config);\n };\n}\n\nconst setDefaultHeaders = (state: ApplicationState) => {\n axios.defaults.headers.common['Authorization'] = `Bearer ${accessTokenSelector(state)}`;\n};\n\n\nexport const authorizationInterceptor: Middleware = (api: MiddlewareAPI) => next => action => {\n\n // @ts-ignore\n if (action.type === AuthenticationActions.loginSuccess.__actionName) {\n const authSuccessAction = action as ReturnType;\n axios.defaults.headers.common['Authorization'] = `Bearer ${authSuccessAction.payload.accessToken}`;\n }\n\n // @ts-ignore\n if (action.type === GeneralActions.applicationStart.__actionName) {\n const accessToken = accessTokenSelector(api.getState());\n if (accessToken != null) {\n axios.defaults.headers.common['Authorization'] = `Bearer ${accessToken}`;\n }\n }\n\n // @ts-ignore\n if (action.type === AuthenticationActions.renewToken.__actionName) {\n const authSuccessAction = action as ReturnType;\n axios.defaults.headers.common['Authorization'] = `Bearer ${authSuccessAction.payload.accessToken}`;\n }\n\n if (!createdInterceptors) {\n axios.interceptors.response.use(response => response, (error: AxiosError) => {\n if (isRetry(error.config) || error.code === 'ECONNABORTED' || error.response.status !== 401 || error.config.url.endsWith('api/account/token')) {\n if (error.config.url.endsWith('account/token')) {\n api.dispatch(AuthenticationActions.signOut());\n }\n\n return Promise.reject(error);\n }\n\n const state = api.getState();\n const refreshToken = refreshTokenSelector(state);\n if (refreshToken == null) {\n return Promise.reject(error);\n }\n\n const dependencies = createDependencies();\n\n return dependencies.accountService(state).refreshToken(refreshToken).then(response => {\n if (response.status !== 200) {\n return Promise.reject(error);\n }\n\n api.dispatch(AuthenticationActions.renewToken(response.data));\n\n error.config.headers['Authorization'] = `Bearer ${response.data.accessToken}`;\n\n setRetryRequestId(error.config);\n return axios(error.config);\n });\n });\n\n createdInterceptors = true;\n }\n\n const result = next(action);\n\n // @ts-ignore\n if (action.type === 'persist/REHYDRATE') {\n setDefaultHeaders(api.getState());\n }\n\n return result;\n};","import { History } from 'history';\nimport { persistReducer } from 'redux-persist';\nimport { persistConfig } from '@/store/persistance-config';\nimport { combineReducers, Reducer } from 'redux';\nimport { ApplicationState } from '@/store/application-state';\nimport { connectRouter } from 'connected-react-router';\nimport { timeTableReducer } from '@/store/timetable/reducer';\nimport { uiReducer } from '@/store/ui/reducer';\nimport { reducer as authenticationReducer } from '@/store/authentication/reducer';\nimport { reducer as generalReducer } from '@/store/general/reducer';\n\nexport const createRootReducer = (history: History): Reducer => {\n\n const appReducer = combineReducers({\n router: connectRouter(history),\n authentication: authenticationReducer,\n timeTable: timeTableReducer,\n ui: uiReducer,\n general: generalReducer\n });\n\n const rootReducer = (state: ApplicationState, action): ApplicationState => {\n if (action.type === 'RESET_APP') {\n state = undefined;\n }\n\n return appReducer(state, action);\n };\n\n return persistReducer(persistConfig, rootReducer);\n};","import { createStore, applyMiddleware } from 'redux';\nimport { createBrowserHistory } from 'history';\nimport { routerMiddleware } from 'connected-react-router';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport { createRootReducer } from '@/store/reducers';\nimport { persistStore } from 'redux-persist';\nimport { createEpicMiddleware } from 'redux-observable';\nimport { epics } from '@/store/epics';\nimport { createDependencies } from '@/store/dependencies';\nimport { authorizationInterceptor } from '@/networking/authorization-interceptor';\n\nconst epicMiddleware = createEpicMiddleware({\n dependencies: createDependencies()\n});\n\nconst composeEnhancers = composeWithDevTools({\n trace: true,\n});\n\n// create the composing function for our middlewares\nexport const history = createBrowserHistory();\n\n// configure middlewares\nconst middlewares = [\n epicMiddleware,\n routerMiddleware(history),\n authorizationInterceptor\n];\n\n// We'll create our store with the combined reducers/sagas, and the initial Redux state that\n// we'll be passing from our entry point.\nexport const store = createStore(\n createRootReducer(history),\n undefined,\n composeEnhancers(\n applyMiddleware(...middlewares)\n )\n);\n\nexport const persistor = persistStore(store);\n\n// Don't forget to run the root saga, and return the store object.\nepicMiddleware.run(epics);","import React, { useState, useContext } from 'react';\nimport { NamedLanguage, Language, LocalizeContext, LocalizeContextProps} from 'react-localize-redux';\nimport {renderToStaticMarkup} from 'react-dom/server';\nimport moment from 'moment';\n\nimport 'moment/locale/nl';\nimport 'moment/locale/en-gb';\n\nimport nlNL from 'antd/lib/locale-provider/nl_NL';\n\nimport enGlobalTranslations from '@/translations/en.global.json';\nimport nlGlobalTranslations from '@/translations/nl.global.json';\n\nimport enAuthenticationTranslations from '@/translations/en.authentication.json';\nimport nlAuthenticationTranslations from '@/translations/nl.authentication.json';\n\nimport { ConfigProvider } from 'antd';\n\nexport const languages: NamedLanguage[] = [\n {\n name: 'Nederlands', \n code: 'nl'\n },\n {\n name: 'English', \n code: 'en'\n }\n];\n\nexport function useTranslate(): LocalizeContextProps {\n return useContext(LocalizeContext);\n}\n\nexport function useActiveLanguage(): [Language, (language: NamedLanguage) => void] {\n const languageContext = useTranslate();\n\n return [\n languageContext.activeLanguage,\n (language) => {\n moment.locale(language.code);\n languageContext.setActiveLanguage(language.code);\n }\n ];\n}\n\nexport function LanguageProvider(props: { children?: React.ReactNode }): React.ReactElement {\n const languageContext = useTranslate();\n const [, setActiveLanguage] = useActiveLanguage();\n\n useState(() => {\n languageContext.initialize({\n languages: languages,\n options: {renderToStaticMarkup}\n });\n \n languageContext.addTranslationForLanguage(nlGlobalTranslations, 'nl'); \n languageContext.addTranslationForLanguage(enGlobalTranslations, 'en');\n\n languageContext.addTranslationForLanguage(enAuthenticationTranslations, 'en');\n languageContext.addTranslationForLanguage(nlAuthenticationTranslations, 'nl');\n \n setActiveLanguage(languages.find(l => l.code === 'nl'));\n });\n\n return {props.children};\n}","/* eslint-disable react/display-name */\nimport React from 'react';\nimport { Button as AntButton } from 'antd';\nimport { useTranslate } from '@/language-provider';\nimport styled from 'styled-components';\nimport { ExtractReactProps } from '@/react/type-helpers';\n\nexport interface ButtonProps extends ExtractReactProps {\n translation?: string;\n tooltipTranslation?: string;\n}\n\nexport function Button(props: ButtonProps): React.ReactElement {\n\n const { translate } = useTranslate();\n\n let translatedTooltip = undefined;\n if (props.tooltipTranslation) {\n translatedTooltip = translate(props.tooltipTranslation).toString();\n }\n\n let translatedText = undefined;\n if (props.translation) {\n translatedText = translate(props.translation).toString();\n }\n\n if (props.icon != null && props.translation != null) {\n translatedText = {translatedText};\n }\n\n return (\n \n {translatedText}\n \n );\n}\n\nconst Wrapper = styled.p`\n display: inline;\n padding-left: 5px;\n`;","import React, { FormEvent } from 'react';\nimport { Card, Checkbox, Col, Form, Icon, Input, Row, Select } from 'antd';\nimport { FormComponentProps } from 'antd/lib/form';\nimport { Button } from '@/components/button';\n\nimport '@/styling/header.scss';\nimport '@/styling/login.scss';\n\nimport { GetFieldDecoratorOptions } from 'antd/lib/form/Form';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { authenticationStatusSelector, tenantSelector, developModeSelector } from '@/store/authentication/selectors';\nimport { AuthenticationActions } from '@/store/authentication/actions';\nimport { Status } from '@/store/authentication/state';\nimport { Translate } from 'react-localize-redux';\n\ninterface FormData {\n tenant?: string;\n customTenant?: string;\n environment?: 'local' | 'production';\n userName: string;\n password: string;\n}\n\nfunction LoginScreen(props: FormComponentProps): React.ReactElement {\n const { getFieldDecorator, getFieldValue, validateFields } = props.form;\n const requiredField = (field: string, message: string, options?: GetFieldDecoratorOptions): (node: React.ReactNode) => React.ReactNode => getFieldDecorator(field, { ...options, rules: [{ required: true, message }] });\n\n const dispatch = useDispatch();\n const authenticationStatus = useSelector(authenticationStatusSelector);\n const developMode = useSelector(developModeSelector);\n const tenant = useSelector(tenantSelector); \n\n function handleSubmit(event: FormEvent): void {\n event.preventDefault();\n\n validateFields((errors: unknown, values: FormData) => {\n if (errors) {\n return;\n }\n\n let newTenant = tenant;\n if (values.tenant != null) {\n if (values.tenant !== 'custom') {\n newTenant = values.tenant;\n } else if (values.customTenant != null) {\n newTenant = values.customTenant;\n }\n }\n \n switch (values.environment) {\n case 'local': dispatch(AuthenticationActions.configureForLocal()); break;\n default: dispatch(AuthenticationActions.configureForProduction(newTenant)); break;\n }\n\n dispatch(AuthenticationActions.login(values.userName, values.password));\n });\n }\n\n return (\n

\n \n

\n
\n {developMode &&\n <>\n \n {requiredField('environment', 'Please choose environment', { initialValue: 'production' })(\n \n )}\n \n {getFieldValue('environment') === 'production' && \n \n {getFieldDecorator('tenant', { initialValue: 'ontwikkel' })(\n \n )}\n \n }\n {getFieldValue('tenant') === 'custom' && \n \n {getFieldDecorator('customTenant')(\n \n )}\n \n }\n \n }\n \n {requiredField('userName', 'Please input your username')(\n } placeholder=\"Username\" />\n )}\n \n \n {requiredField('password', 'Please input your Password')(\n } placeholder=\"Password\" type=\"password\" />\n )}\n \n \n \n \n {getFieldDecorator('remember', { valuePropName: 'checked', initialValue: true })(\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n );\n}\n\nexport default Form.create()(LoginScreen);\n\n","import React from 'react';\n\nimport {Icon} from 'antd';\n\ninterface CallLinkProps {\n phoneNumber: string;\n size: number;\n}\n\nexport function CallLink({phoneNumber, size}: CallLinkProps): React.ReactElement {\n const link = 'tel://' + (phoneNumber === undefined ? 'GeenNummer' : phoneNumber);\n\n return (\n \n \n \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport moment from 'moment';\nimport './date-picker.scss';\nimport {Col, Icon, Row} from 'antd';\n\ninterface Props {\n changed: (newDate: Date) => void;\n current: Date;\n}\n\nexport function DatePicker(props: Props): React.ReactElement {\n const [currentDate, setCurrentDate] = useState(moment(props.current));\n const [currentDateDisplay, setCurrentDateDisplay] = useState(undefined as string);\n\n useEffect(() => {\n const converted = moment(props.current);\n setCurrentDate(converted);\n setCurrentDateDisplay(converted.format('dddd D MMMM'));\n }, [props.current]);\n\n return (\n \n \n props.changed(currentDate.clone().subtract(1, 'day').toDate())} style={{display: 'inline-block', float: 'left'}}>\n \n \n \n\n \n {currentDateDisplay}\n \n\n \n props.changed(currentDate.clone().add(1, 'day').toDate())} style={{display: 'inline-block', float: 'right'}}>\n \n \n \n \n );\n}","export const Colors = {\n status: {\n expected: '#FB8C00',\n notExpected: '#FFFFFF',\n absent: '#757575',\n sick: '#E53935',\n present: '#43A047'\n }\n};\n","import moment from 'moment';\nimport { ChildCare } from '@/networking/models';\n\ntype TransportChild = ChildCare.Definitions.Transport.Models.TransportChild;\ntype PresencesStatus = ChildCare.Definitions.GroupApp.PresencesStatus;\n\nexport function determineChildStatus(child: TransportChild, time: string): PresencesStatus {\n if (time == null) {\n return child?.status;\n }\n\n const timeOfDay = moment.duration(time);\n\n let childTimes = Object.keys(child.statuses).map(x => ({ key: x, time: moment.duration(x) }));\n childTimes = childTimes.sort((a, b) => b.time.asMilliseconds() - a.time.asMilliseconds());\n\n for (const childTime of childTimes) {\n if (timeOfDay >= childTime.time) {\n return child.statuses[childTime.key];\n }\n }\n\n return 'notExpected' as PresencesStatus;\n}","import React, { useMemo, CSSProperties } from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faGenderless, faMars, faVenus } from '@fortawesome/free-solid-svg-icons';\nimport './avatar.scss';\nimport { TimeChild } from '@/store/timetable/selectors';\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { Colors } from '@/constants/colors';\nimport { ChildCare } from '@/networking/models';\nimport { useTableEntry } from '../school-row/school-row';\nimport { determineChildStatus } from '@/utils/child-status';\n\n\nfunction genderIcon(gender: ChildCare.Definitions.Common.Gender): IconDefinition {\n switch (gender) {\n case 'male': return faMars;\n case 'female': return faVenus;\n default: return faGenderless;\n }\n}\n\ninterface Props {\n child: TimeChild;\n large: boolean;\n time?: string;\n}\n\nexport const Avatar: React.FC = ({ child, large, time }) => {\n\n const icon = useMemo(() => genderIcon(child.gender), [child]);\n const extraClasses = useMemo(() => large ? 'large' : '', [large]);\n\n let picture;\n\n if (child.picture) {\n picture = ;\n } else {\n picture = (\n
\n \n \n \n
\n );\n }\n\n return (\n
\n {picture}\n \n
\n );\n};\n\nconst AvatarStatus: React.FC<{ child: TimeChild; time: string; extraClasses: string }> = ({ child, time, extraClasses }) => {\n const { presentRecord } = child;\n\n const entry = useTableEntry();\n\n const color = useMemo(() => {\n const effectiveStatus = determineChildStatus(child, entry?.time?.time ?? time);\n\n if (presentRecord != null) {\n if (presentRecord.isPresent) {\n return Colors.status.present;\n } else {\n return Colors.status.absent;\n }\n }\n\n switch (effectiveStatus) {\n case 'notExpected': return Colors.status.notExpected;\n case 'expected': return Colors.status.expected;\n case 'present': return Colors.status.present;\n case 'sick': return Colors.status.sick;\n case 'absent': return Colors.status.absent;\n }\n }, [entry, child]);\n\n return ;\n};","import * as React from 'react';\n\nimport {Col, Row} from 'antd';\nimport {Avatar} from '@/components/avatar';\nimport {TimeChild} from '@/store/timetable/selectors';\nimport {Link} from 'react-router-dom';\nimport {ChildCare} from '@/networking/models';\n\ninterface ChildRowProps {\n school: ChildCare.Definitions.Transport.Models.TransportSchool;\n time: string;\n child: TimeChild;\n}\n\nexport function ChildRow({ child, school, time }: ChildRowProps): React.ReactElement {\n const navigationState = {\n child,\n school,\n time\n };\n\n return (\n \n \n \n \n \n \n \n {child.childName}\n \n \n \n \n );\n}\n","import React, { useState, useEffect } from 'react';\nimport { TimeTableEntry } from '@/store/timetable/selectors';\n\nimport { Col, List, Row } from 'antd';\nimport { ChildRow } from './child-row';\nimport './content.scss';\nimport { useSelector } from 'react-redux';\nimport { selectedEntriesSelector } from '../../store/ui/selectors';\nimport { EntriesType } from '@/store/ui/state';\nimport { determineChildStatus } from '@/utils/child-status';\n\nconst SchoolStatusIndicator: React.FC<{ entry: TimeTableEntry }> = ({ entry }) => {\n const [allPickedUp, setAllPickedUp] = useState(false);\n const [totalExpectedChildren, setTotalExpectedChildren] = useState(0);\n\n useEffect(() => {\n let totalExpected = 0;\n let totalExpectedSet = 0;\n let totalOtherSet = 0;\n\n\n for (const child of entry.children) {\n const status = determineChildStatus(child, entry.time.time);\n\n if (status === 'expected') {\n totalExpected++;\n }\n\n if (child.presentRecord != null) {\n if (status === 'expected') {\n totalExpectedSet++;\n } else if (child.presentRecord != null) {\n totalOtherSet++;\n }\n }\n }\n\n // You are able to select a sick or absent child, this must be reflected in the number shown\n setTotalExpectedChildren(totalExpected + totalOtherSet);\n\n setAllPickedUp(totalExpectedSet === totalExpected);\n }, [entry.children]);\n\n return (\n
\n {totalExpectedChildren}\n
\n );\n};\n\nconst TableEntryContext = React.createContext<{ entry: TimeTableEntry }>(undefined);\n\nexport const useTableEntry = (): TimeTableEntry => {\n const context = React.useContext(TableEntryContext);\n return context?.entry;\n};\n\nexport const SchoolRow: React.FC<{ entry: TimeTableEntry }> = ({ entry }) => {\n const entriesType = useSelector(selectedEntriesSelector);\n\n const childRows = entry.children.map(\n child => \n );\n\n return (\n \n \n {entry.time.time}\n {entry.school.name}\n \n \n \n \n \n {entry.ride?.comment}\n {entry.vehicle?.name}\n \n {entriesType === EntriesType.Location &&\n \n {entry.employee?.name}\n \n }\n \n {childRows}\n \n \n );\n};","import React from 'react';\nimport { Icon } from 'antd';\nimport { useDispatch } from 'react-redux';\n\nexport function Logout({size}: {size: number}): React.ReactElement {\n\n const dispatch = useDispatch();\n\n return (\n dispatch({ type: 'RESET_APP' })}/>\n );\n}\n","import React from 'react';\n\nimport {Icon} from 'antd';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { TimeTableActions } from '@/store/timetable/actions';\nimport { selectedDateSelector } from '@/store/ui/selectors';\nimport { GeneralActions } from '../store/general/actions';\nimport { locationSelector } from '../store/timetable/selectors';\n\nexport function RefreshButton({size}: {size: number}): React.ReactElement {\n const dispatch = useDispatch();\n const date = useSelector(selectedDateSelector);\n const location = useSelector(locationSelector);\n\n return (\n {\n dispatch(TimeTableActions.loadTimeTables());\n dispatch(GeneralActions.fetchEmployees(date, location?.locationId));\n }} />\n );\n}\n\n","import React from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Status as TimeTableStatus } from '@/store/timetable/state';\nimport { UIActions } from '@/store/ui/actions';\n\nimport { Card, Col, List, Row } from 'antd';\nimport { CallLink } from '@/components/call-link';\n\nimport { DatePicker } from '@/components/date-picker';\nimport { getFilteredTimeTable } from '@/store/timetable/selectors';\nimport { SchoolRow } from '@/components/school-row';\nimport { ActionSheet } from 'antd-mobile';\n\nimport '@/styling/header.scss';\nimport { FilterTypes, EntriesType } from '@/store/ui/state';\nimport moment from 'moment';\n\nimport { Logout } from '@/components/logout/logout';\nimport { RefreshButton } from '@/components/refresh-button';\nimport { locationSelector, statusSelector } from '../store/timetable/selectors';\nimport { selectedDateSelector, selectedFilterSelector, selectedEntriesSelector } from '../store/ui/selectors';\nimport { ActionSheetWithOptions } from 'antd-mobile/lib/action-sheet';\nimport { TimeTableActions } from '../store/timetable/actions';\nimport { useTranslate } from '@/language-provider';\nimport styled from 'styled-components';\n\n\nfunction createActionSheet(options: string[], title: string, message: string): ActionSheetWithOptions {\n return {\n options: options,\n cancelButtonIndex: options.length - 1,\n title: title,\n message: message,\n maskClosable: true\n };\n}\n\nfunction HomeFilters(): React.ReactElement {\n const dispatch = useDispatch();\n const selectedFilter = useSelector(selectedFilterSelector);\n const selectedEntries = useSelector(selectedEntriesSelector);\n \n\n const filterIndexToType = (index: number): FilterTypes => index === 0 ? FilterTypes.Bring : index === 1 ? FilterTypes.Fetch : FilterTypes.None;\n \n function showFilterActionSheet(): void {\n ActionSheet.showActionSheetWithOptions(\n createActionSheet(['Brengen', 'Ophalen', 'Geen', 'Annuleren'], 'Filter de tijdblokken', 'Selecteer hier het gewenste filter voor de tijdblokken'),\n index => { dispatch(UIActions.selectFilter(filterIndexToType(index))); }\n );\n }\n\n function showPlannedActionSheet(): void {\n ActionSheet.showActionSheetWithOptions(\n createActionSheet(['Medewerker', 'Locatie', 'Annuleren'], 'Filter de ritten', 'Selecteer hier het gewenste filter voor de ritten'),\n index => { dispatch(UIActions.selectEntries(index === 0 ? EntriesType.Employee : EntriesType.Location)); }\n );\n }\n\n return (\n
\n \n \n \n \n {selectedFilter}\n \n \n \n \n {selectedEntries}\n \n \n \n dispatch(UIActions.selectDate(moment().toDate()))}>Vandaag\n \n \n \n
\n );\n}\n\nfunction HomeHeader(): React.ReactElement {\n const dispatch = useDispatch();\n const location = useSelector(locationSelector);\n const selectedDate = useSelector(selectedDateSelector);\n\n return (\n
\n \n \n {location?.phoneNumber == null ? undefined : }\n \n\n \n {location?.locationName}\n \n\n \n \n \n\n \n \n \n \n\n \n dispatch(UIActions.selectDate(date))} />\n \n\n \n
\n );\n}\n\nexport function HomeScreen(): React.ReactElement {\n const dispatch = useDispatch();\n const { translate } = useTranslate();\n const status = useSelector(statusSelector);\n const timeTable = useSelector(getFilteredTimeTable);\n const selectedDate = useSelector(selectedDateSelector);\n const location = useSelector(locationSelector);\n\n if (status === TimeTableStatus.Init) {\n dispatch(TimeTableActions.loadInitialInfo(selectedDate));\n }\n\n return (\n
\n \n\n
\n\n {status !== TimeTableStatus.LoadingTimeTable && location == null &&

{translate('authentication.no-employee-location')}

}\n }\n />\n
\n
\n );\n}\n\nconst MessageContainer = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: orange;\n height: 100px;\n border-radius: 10px;\n`;","import { useContext } from 'react';\nimport { __RouterContext as RouterContext, RouteComponentProps } from 'react-router';\n\nexport function useRouter(): RouteComponentProps {\n return useContext(RouterContext);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useParams(): any {\n const { match } = useRouter();\n return match.params;\n}\n\ntype navigateFunc = (to: string, options: { replace: boolean }) => void;\n\nexport function useLocation(): { location: RouteComponentProps['location']; navigate: navigateFunc} {\n const { location, history } = useRouter();\n \n function navigate(to: string, { replace = false } = {}): void {\n if (replace) {\n history.replace(to);\n } else {\n history.push(to);\n }\n }\n \n return {\n location,\n navigate\n };\n}","import React from 'react';\nimport moment from 'moment';\n\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport '@/styling/header.scss';\nimport '@/styling/overlays.scss';\nimport { TimeChild } from '@/store/timetable/selectors';\nimport { Col, Row, Button, Timeline, Icon } from 'antd';\nimport { CallLink } from '@/components/call-link';\nimport { Avatar } from '@/components/avatar';\nimport { ChildCare } from '@/networking/models';\nimport { UIActions } from '@/store/ui/actions';\nimport { useRouter, useLocation } from '@/router/react-router-hooks';\nimport { selectedDateSelector } from '@/store/ui/selectors';\n\ntype TransportPlanning = ChildCare.Definitions.Transport.Models.TransportPlanning;\n\nconst Header: React.FC<{ child: TimeChild; time: string }> = ({ child, time }) => {\n const { history } = useRouter();\n\n return (\n
\n \n \n \n \n\n \n \n \n\n \n \n \n \n\n {child.childName}\n {child.schoolClass}\n
\n );\n};\n\nconst Plannings: React.FC<{ plannings: TransportPlanning[] }> = ({ plannings }) => {\n if (plannings == null) {\n return <>;\n }\n\n return (\n
\n

Planning

\n \n {plannings.map(p =>\n \n {p.startTime} - {p.endTime}    \n {p.group}\n \n )}\n \n
\n );\n};\n\nexport function ChildDetailsScreen(): React.ReactElement {\n const { location } = useLocation();\n const { history } = useRouter();\n\n const { school, time, child } = location.state as {\n school: ChildCare.Definitions.Transport.Models.TransportSchool;\n time: string;\n child: TimeChild;\n };\n\n const dispatch = useDispatch();\n const selectedDate = useSelector(selectedDateSelector);\n\n function isPresent(): void {\n dispatch(UIActions.isPresent(moment(selectedDate), time, child.childId, school.schoolId));\n history.goBack();\n }\n\n function isAbsent(): void {\n dispatch(UIActions.isAbsent(moment(selectedDate), time, child.childId, school.schoolId));\n history.goBack();\n }\n\n return (\n
\n
\n\n \n \n \n \n\n \n \n \n \n\n \n
\n );\n}","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport React from 'react';\nimport { Redirect, Route, RouteComponentProps, RouteChildrenProps } from 'react-router';\nimport { Location } from 'history';\nimport { useSelector } from 'react-redux';\nimport { Status as AuthenticationStatus } from '@/store/authentication/state';\nimport LoginScreen from '@/screens/login';\nimport { HomeScreen } from '@/screens/home';\nimport { ChildDetailsScreen } from '@/screens/child-details';\nimport { AnimatedSwitch } from 'react-router-transition';\nimport { authenticationStatusSelector } from './store/authentication/selectors';\n\nexport interface AppRoute {\n isRedirect?: boolean;\n location?: Location;\n component?: React.ComponentType> | React.ComponentType;\n render?: ((props: RouteComponentProps) => React.ReactNode);\n children?: ((props: RouteChildrenProps) => React.ReactNode) | React.ReactNode;\n path?: string | string[];\n exact?: boolean;\n sensitive?: boolean;\n strict?: boolean;\n}\n\nfunction getAuthenticatedRoutes(): AppRoute[] {\n return [\n { path: '/child-details', exact: true, component: ChildDetailsScreen },\n { path: '/', exact: true, component: HomeScreen },\n { component: HomeScreen }\n ];\n}\n\nfunction getUnauthenticatedRoutes(): AppRoute[] {\n return [\n { exact: true, path: '/login', component: LoginScreen },\n { isRedirect: true, path: '/login' },\n ];\n}\n\nexport function AppRouter(): React.ReactElement {\n const status = useSelector(authenticationStatusSelector);\n\n let routes: AppRoute[];\n if (status === AuthenticationStatus.Authenticated) {\n routes = getAuthenticatedRoutes();\n } else {\n routes = getUnauthenticatedRoutes();\n }\n\n return (\n \n {routes.map((x, index) => {\n if (x.isRedirect && !Array.isArray(x.path)) {\n return ;\n } else {\n return ;\n }\n })}\n \n );\n}","import R from 'ramda';\n\nexport class Secret {\n constructor(public command: string, public action: () => void) {\n\n }\n}\n\nfunction GetPressedKey(e: KeyboardEvent): string {\n switch (e.code) {\n case 'Backquote':\n if (e.shiftKey) {\n return '~';\n } else {\n return '`';\n }\n }\n\n \n return e.key;\n}\n\nexport function InitializeSecretsListener(secrets: Secret[]): void {\n const lookup = secrets.reduce((acc, cur) => {\n acc[cur.command] = cur; \n return acc;\n }, {} as { [key: string]: Secret });\n\n let pressedKeys = [];\n const letters = R.uniq(R.flatten(R.map(x => x.command.split(''), secrets)));\n let timer = null;\n\n window.onkeyup = (e: KeyboardEvent) => {\n\n if (timer != null) {\n clearTimeout(timer);\n }\n timer = setTimeout(() => {\n pressedKeys = [];\n }, 3000);\n \n const pressedKey = GetPressedKey(e);\n \n if (!letters.includes(pressedKey) || pressedKey === 'Pause') {\n pressedKeys = [];\n return;\n }\n \n pressedKeys.push(pressedKey);\n const current = pressedKeys.join('');\n\n const command = lookup[current];\n if (command != null) {\n console.log(`Secret ${current} activated`);\n command.action();\n pressedKeys = [];\n } \n };\n}","import React, { useState } from 'react';\nimport styled from 'styled-components';\nimport { Translate } from 'react-localize-redux';\nimport { Button } from '@/components/button';\nimport { useLifeCycle } from '@/react/hooks';\n\nexport function NewVersion(): React.ReactElement {\n const [newServiceWorker, setNewServiceWorker] = useState(undefined as ServiceWorker);\n \n useLifeCycle(() => {\n if (env.mode === 'development') {\n return;\n }\n \n return window.navigator.serviceWorker.register('/service-worker.js').then(registration => {\n setInterval(() => registration.update(), 60000);\n\n if (registration.waiting != null) {\n setNewServiceWorker(registration.waiting);\n }\n \n registration.addEventListener('updatefound', () => {\n const newWorker = registration.installing;\n \n newWorker.addEventListener('statechange', () => {\n if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {\n setNewServiceWorker(newWorker);\n }\n });\n });\n \n let refreshing;\n navigator.serviceWorker.addEventListener('controllerchange', function () {\n if (refreshing) {\n return;\n }\n \n window.location.reload();\n refreshing = true;\n });\n }).catch(() => { /* */ });\n }, () => { /* */ });\n\n if (newServiceWorker == null) {\n return <>;\n }\n\n console.log('🚀 New version available 🚀');\n\n return (\n \n \n newServiceWorker.postMessage({ action: 'update' })} />\n \n );\n}\n\nconst Container = styled.div`\n --width: 500px;\n\n position: absolute;\n display: grid;\n grid-template-columns: 200px;\n grid-template-areas: \n 'text'\n 'button';\n align-content: center;\n justify-content: center;\n padding: 5px;\n\n width: var(--width);\n background-color: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n left: calc(50% - var(--width) / 2);\n bottom: 25px;\n`;\n\nconst Text = styled.p`\n grid-area: text;\n text-align: center;\n font-weight: bold;\n`;\n\nconst RefreshButton = styled(Button)`\n grid-area: button;\n`;","import { useState, useEffect } from 'react';\n\nexport function useLifeCycle(init: () => void, cleanup: () => void): void { \n const [initialized] = useState(() => {\n init();\n return true;\n });\n useEffect(() => cleanup, [initialized]);\n}","export enum EnvironmentMode {\n development = 'development',\n production = 'production'\n}","import React from 'react';\nimport Terminal from 'react-console-emulator';\nimport { useDispatch, useSelector, useStore } from 'react-redux';\nimport { terminalVisibleSelector } from '@/store/ui/selectors';\nimport { AuthenticationActions } from '@/store/authentication/actions';\nimport { tenantSelector, authenticationStatusSelector, developModeSelector, apiUrlSelector } from '@/store/authentication/selectors';\nimport { UIActions } from '@/store/ui/actions';\n\nexport function DeveloperConsole(): React.ReactElement {\n const dispatch = useDispatch();\n const store = useStore();\n \n const isTerminalVisible = useSelector(terminalVisibleSelector);\n\n if (!isTerminalVisible) {\n return <>;\n }\n\n const commands = {\n config: {\n description: 'Configure for mode',\n usage: 'config (local | production)',\n fn: function (mode: string, tenant?: string) {\n if (mode == null) {\n const developMode = developModeSelector(store.getState());\n const apiUrl = apiUrlSelector(store.getState());\n\n if (developMode) {\n return `development api=${apiUrl}`;\n } else {\n return `production api=${apiUrl}`;\n }\n }\n\n tenant = tenant ?? tenantSelector(store.getState());\n\n switch (mode) {\n case 'local': dispatch(AuthenticationActions.configureForLocal()); break;\n case 'production': dispatch(AuthenticationActions.configureForProduction(tenant)); break;\n }\n \n return 'configured';\n }\n },\n tenant: {\n description: 'tenant',\n usage: 'tenant ',\n fn: function (tenant?: string) {\n if (tenant) {\n dispatch(AuthenticationActions.tenant(tenant));\n }\n\n return `current: ${tenantSelector(store.getState())}`;\n }\n },\n login: {\n description: 'login',\n usage: 'login (@)? ',\n fn: function (username: string, password: string) {\n if (username != null && password != null) {\n const atIndex = username.indexOf('@');\n if (atIndex > -1) {\n dispatch(AuthenticationActions.tenant(username.slice(atIndex + 1)));\n username = username.slice(0, atIndex);\n }\n \n dispatch(AuthenticationActions.login(username, password));\n }\n\n return `Status: ${authenticationStatusSelector(store.getState())}`;\n }\n },\n signout: {\n description: 'signout',\n usage: 'signout',\n fn: function () {\n dispatch(AuthenticationActions.signOut());\n dispatch(AuthenticationActions.developMode());\n dispatch(UIActions.toggleTerminal());\n }\n },\n version: {\n description: 'version',\n usage: 'version',\n fn: function () {\n return `${env.buildnumber}-${env.commit} (${env.mode})`;\n }\n }\n };\n\n return (\n \n );\n}","\nimport React, { useState, PropsWithChildren } from 'react';\nimport { initializeFontAwesome } from './font-awesome';\nimport { NewVersion } from './components/new-version';\nimport { useStore, useDispatch, useSelector } from 'react-redux';\nimport { EnvironmentMode } from './environment-mode';\nimport { getTenant } from './networking/network-utils';\nimport { AuthenticationActions } from './store/authentication/actions';\nimport { GeneralActions } from './store/general/actions';\nimport styled from 'styled-components';\nimport { DeveloperConsole } from './components/developer-console';\nimport { developModeSelector } from './store/authentication/selectors';\nimport { terminalVisibleSelector } from './store/ui/selectors';\n\nexport function AppComponent(props: PropsWithChildren<{}>): React.ReactElement {\n const dispatch = useDispatch();\n const store = useStore();\n const developMode = useSelector(developModeSelector);\n const isTerminalVisible = useSelector(terminalVisibleSelector);\n\n useState(() => {\n initializeFontAwesome();\n dispatch(GeneralActions.applicationStart());\n });\n\n if (env.mode === EnvironmentMode.development) {\n store.dispatch(AuthenticationActions.developMode());\n }\n \n const tenant = getTenant();\n if (tenant != null) {\n store.dispatch(AuthenticationActions.tenant(tenant));\n }\n\n return (\n
\n {developMode && isTerminalVisible &&\n \n \n \n }\n {props.children}\n \n
\n );\n}\n\nconst DeveloperConsoleContainer = styled.div`\n position: absolute;\n width: 100%;\n height: 250px;\n z-index: 1;\n`;","\nimport {library} from '@fortawesome/fontawesome-svg-core';\nimport { faHome, faCalendarAlt, faHourglassHalf, faUserPlus, faLongArrowAltUp, faLongArrowAltDown, faSignOutAlt, faBatteryThreeQuarters } from '@fortawesome/free-solid-svg-icons';\n\n///////////////////////////////////////////\n///// Imported Font Awesome icons /////\n///////////////////////////////////////////\n\nexport const initializeFontAwesome = (): void => {\n library.add(faHome);\n library.add(faCalendarAlt);\n library.add(faHourglassHalf);\n library.add(faUserPlus);\n library.add(faLongArrowAltUp);\n library.add(faLongArrowAltDown);\n library.add(faSignOutAlt);\n library.add(faBatteryThreeQuarters);\n};","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { ConnectedRouter } from 'connected-react-router';\nimport { Provider } from 'react-redux';\nimport { PersistGate } from 'redux-persist/integration/react';\nimport { store, history, persistor } from '@/store/configure-store';\n\nimport { hot } from 'react-hot-loader/root';\n\nimport '@/styling/general.scss';\nimport { AppRouter } from '@/app-router';\nimport { InitializeSecretsListener, Secret } from '@/secrets-listener';\nimport { LocalizeProvider } from 'react-localize-redux';\nimport { LanguageProvider } from '@/language-provider';\nimport { AppComponent } from '@/app-component';\nimport { AuthenticationActions } from './store/authentication/actions';\nimport { EnvironmentMode } from './environment-mode';\nimport { UIActions } from './store/ui/actions';\n\nconsole.log(`🚀 Version ${env.buildnumber} build from ${env.commit} and currently running in ${env.mode} mode`);\n\nif (env.mode === EnvironmentMode.development) {\n store.dispatch(AuthenticationActions.developMode());\n}\n\nInitializeSecretsListener([\n new Secret('clear', () => {\n persistor.purge();\n store.dispatch({ type: 'RESET_APP' });\n }),\n new Secret('`', () => {\n store.dispatch(UIActions.toggleTerminal());\n }),\n new Secret('develop', () => {\n store.dispatch(AuthenticationActions.developMode());\n })\n]);\n\nconst rootElement = document.getElementById('root');\n\nconst Root = hot(() =>\n \n \n \n);\n\nReactDOM.render(\n \n \n \n \n \n \n \n \n \n \n ,\n rootElement\n);\n"],"sourceRoot":""}