{"version":3,"sources":["components/Reusable/TextFields.js","db/DbTasks.js","actions/Types.js","actions/UserActions.js","components/Login.js","helpers/HelperFunctions.js","components/PrivateRoute.js","actions/AppActions.js","components/Home.js","components/Reusable/TreeView.js","components/Update.js","components/Reusable/SwipeableDrawer.js","components/Reusable/CardContainerSmall.js","components/Notifications/NotificationList.js","actions/NotificationActions.js","components/Reusable/Dialog.js","components/Reusable/CardContainer.js","components/Reusable/BackdropSpinner.js","components/Urlaub/Urlaub.js","components/extensions/TakePhoto.js","components/Reusable/CardContainerDates.js","components/Krankenmeldung/Krankenmeldung.js","components/Leistungspremie/Monatsleistung.js","components/Leistungspremie/Tagesleistung.js","components/Gallery/Gallery.js","components/Reusable/Spinner.js","components/Reusable/Notifications.js","components/Kvp/Kvp.js","components/Wegweisser/Wegweisser.js","components/Gallery/GalleryPreview.js","components/Wegweisser/WegweisserSubGroups.js","components/Wegweisser/WegweisserAnswers.js","components/FirmaInfo/Arbeitszeiten.js","components/FirmaInfo/Veranstaltungen.js","components/FirmaInfo/Allgemein.js","components/Urlaub/UrlaubOverview.js","serviceWorkerRegistration.js","components/MainLayout.js","App.js","reducers/AppReducer.js","reducers/NotificationReducer.js","reducers/index.js","store.js","index.js"],"names":["CssTextField","withStyles","root","backgroundColor","borderRadius","color","marginTop","borderBottomColor","borderColor","TextField","TextFields","props","error","onChange","value","id","label","type","variant","className","class","fullWidth","disabled","autoComplete","onKeyPress","DbTasks","getRequestOption","method","data","useContentType","requestOption","Cookies","get","headers","body","JSON","stringify","login","username","password","settings","a","jwt","requestOptions","fetch","process","then","handleResponse","user","console","log","set","token","secure","catch","err","retVal","initialDataLoad","dbNotifications","getAllNotifications","res","notifications","response","text","parse","ok","status","logout","message","statusText","Promise","reject","getDataFromApi","loadData","json","getDataFromDb","url","this","db","Dexie","version","stores","table","toArray","sorted","sort","b","put","seen","description","createdDate","Date","where","delete","update","base64","_b64","startsWith","substring","raw","window","atob","rawLength","length","array","Uint8Array","ArrayBuffer","i","charCodeAt","Blob","formData","FormData","Attachments","map","item","blobData","_base64ToArrayBuffer","fileName","forEach","append","Object","keys","endpoint","LOGIN_SUCCESS","TOGGLE_DRAWER","INITIALISE_STATE","TOGGLE_SPINNER","ADD_NEW_NOTIFICATION","MARK_NOTIFICATION_AS_READ","SW_INIT","SW_UPDATE","INSTALL_APP","SHOW_INSTALL_PROMPT","userLogin","dbTasks","dispatch","useStyles","makeStyles","theme","minHeight","maxWidth","overflowX","margin","spacing","display","flexDirection","justifyContent","alignItems","elementSpacing","button","fontSize","wrapper","position","buttonSuccess","fabProgress","green","top","left","zIndex","buttonProgress","marginLeft","logo","maxHeight","Login","classes","React","useState","loading","setLoading","success","setSuccess","benutzer","setName","passwort","setPasswort","buttonClassname","clsx","logIn","localProps","navigator","onLine","alert","loginReturn","history","push","Grid","container","direction","alignContent","justify","lg","md","sm","xs","style","textAlign","src","alt","e","currentTarget","key","Button","data-testid","onClick","CircularProgress","size","getSession","session","split","replace","getBeraterId","cookie","parseInt","nameid","getBase64","file","resolve","reader","FileReader","readAsDataURL","onload","img","Image","result","extension","newDataUri","width","height","canvas","document","createElement","ctx","getContext","drawImage","toDataURL","imageToDataUri","onerror","PrivateRoute","Component","component","rest","render","to","pathname","toggleDrawer","val","payload","toggleSpinner","minWidth","withRouter","useDispatch","birthdays","setBirthdays","useEffect","TableContainer","Paper","align","Table","aria-label","TableHead","TableRow","TableCell","colSpan","scope","TableBody","row","fullName","geburtstag","moment","format","termin","palette","background","paper","nested","paddingLeft","firmaOpen","leistungOpen","wegOpen","state","setOpen","wegweisserList","privateEvent","publicEvent","menuState","setMenuState","useSelector","app","beraterId","wegList","BeraterId","veran","allgemein","handleClick","prop","redirectTo","menuOpen","List","aria-labelledby","subheader","borderBottom","Box","p","bgcolor","flexGrow","alignSelf","rowSpan","IconButton","closeButton","ListItem","ListItemIcon","Chat","ListItemText","primary","Info","Collapse","in","timeout","unmountOnExit","disablePadding","Schedule","Event","Badge","badgeContent","Today","FlightTakeoff","LocalHospital","Euro","CalendarToday","name","PhotoLibrary","UpdateComponent","sw","serviceWorkerRegistration","fontWeight","registrationWaiting","waiting","postMessage","addEventListener","target","location","reload","grow","menuButton","marginRight","title","breakpoints","up","notificationMenu","search","shape","fade","common","white","searchIcon","padding","pointerEvents","inputRoot","inputInput","transition","transitions","create","sectionDesktop","sectionMobile","drawerOpen","showUpdateBtn","serviceWorkerUpdated","anchorEl","setAnchorEl","anchorElNotification","setAnchorNotification","mobileMoreAnchorEl","setMobileMoreAnchorEl","isMenuOpen","Boolean","isNotificationMenuOpen","isMobileMenuOpen","handleProfileMenuOpen","event","handleMobileMenuClose","handleMenuClose","notificationList","list","filter","anchor","menuId","renderMenu","anchorOrigin","vertical","horizontal","keepMounted","transformOrigin","open","onClose","MenuItem","remove","renderMenuNotifications","Typography","noWrap","mobileMenuId","renderMobileMenu","aria-controls","aria-haspopup","AppBar","Toolbar","edge","SwipeableDrawer","onOpen","fullList","role","Divider","cardRoot","textTransform","bullet","transform","pos","marginBottom","red","blue","palm","circleStyle","opacity","circle","ravno","iconContainer","CardContainerSmall","Card","subtitle","number","mainIcon","animatedItem","animation","easing","easeInOut","markNotificationAsRead","param","index","Transition","forwardRef","ref","Slide","AlertDialogSlide","Dialog","TransitionComponent","handleClose","aria-describedby","DialogTitle","DialogContent","DialogContentText","DialogActions","handleSubmit","secondary","CardContainer","CardContent","gutterBottom","backdrop","drawer","BackdropSpinner","Backdrop","showLoading","right","plannedDays","availableDays","usedDays","overtimeHours","showLoader","localState","setLocalState","dateRange","setDateRange","totalAvailable","previousYearRest","currentYearAvailableDays","usedThisYear","date","endIcon","cursor","startDate","setHours","endDate","TakePhoto","setRef","webcam","takeScreenshootHandle","imageSrc","getScreenshot","handleTakeScreenshot","fullScreen","videoConstraints","facingMode","cardRootMini","holiday","circleStyleMini","numberMini","CardContainerDates","useMini","groupedBtn","sectionHeading","show","hide","showUsed","showUsedDates","showForm","TakePhotoOpen","images","dialog","signDialogOpen","valueFenster","valueGlas","assemblyCompleted","constructionSiteClean","deliveryWithoutDamage","abhnameFreiText","sendMailDialogOpen","subject","email","emailValid","setState","krankDates","file_input","uploadFile","values","files","startIcon","multiline","rows","ButtonGroup","preventDefault","multiple","bind","click","border","GridList","cellHeight","cols","tile","GridListTile","GridListTileBar","idToRemove","imagesWithoutDeletedOnes","removeImage","actionIcon","Delete","getElementById","Subject","dataUpload","el","tagesData","minPremia","maxPremia","premieState","setPremieData","pastYear","setFullYear","getFullYear","month","year","premia","match","params","flexWrap","overflow","listStyleType","gridList","icon","cardText","cardIcon","folders","setFolders","folderName","Spinner","buttonLoadingEnabled","customStyle","buttonText","Notifications","NotificationManager","info","warning","test","tblContainer","boxShadow","setSubject","desc","setDesc","suggestionList","loader","reloadTable","kvpState","setKvpState","Name","CreatedBy","uploadData","feedback","created","cardColor","groups","setGroups","subgroupTotal","imageList","setImageList","dialogOpen","setDialogOpen","download","fullPreview","blob","onloadend","base64data","innerHTML","URL","createObjectURL","href","appendChild","imageName","datum","totalQuestions","heading","typography","pxToRem","accStil","answer","fontFamily","Accordion","AccordionSummary","expandIcon","question","AccordionDetails","workingTimes","von","bis","isHoliday","borderTop","veranNoContent","showContent","setShowContent","Type","hidden","allgemeinNoContent","usedDates","plannedDates","urlaubRequest","setUrlaubData","isLocalhost","hostname","registerValidSW","swUrl","config","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","redirectToComponent","lastIndexOf","slice","indexOf","addNotification","notification","initialiseState","reg","ready","pushManager","getSubscription","subscription","errorHandler","removeEventListener","Notification","requestPermission","subscribe","base64Encode","arrayBuffer","btoa","String","fromCharCode","apply","subscribeParams","userVisibleOnly","applicationServerKey","base64String","repeat","rawData","outputArray","urlB64ToUint8Array","p256dh","getKey","auth","PushEndpoint","PushP256DH","PushAuth","warn","bottom","paddingTop","promptBar","installText","verticalAlign","App","createMuiTheme","shadows","Array","fill","useNextVariants","main","contrastText","showInstallPrompt","setInstallPrompt","deferredPrompt","setDeferred","matchMedia","matches","exact","path","route","MainLayout","prompt","userChoice","choiceResult","outcome","initialState","updateAvailable","installApp","alreadyInstalled","installPromptShowedTimes","serviceWorkerInitialized","combineReducers","action","testData","middleware","thunk","configureStore","store","createStore","rootReducer","composeWithDevTools","applyMiddleware","ReactDOM","origin","contentType","unregister","checkValidServiceWorker","onWaiting"],"mappings":"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","file":"static/js/main.b36babe3.chunk.js","sourcesContent":["import React from 'react';\r\nimport {\r\n withStyles,\r\n} from '@material-ui/core/styles';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nconst CssTextField = withStyles({\r\n root: {\r\n backgroundColor: '#fcfcfb',\r\n borderRadius: '4px',\r\n '& label.Mui-focused': {\r\n color: '#58585a',\r\n marginTop: '-4px'\r\n },\r\n '& .MuiInput-underline:after': {\r\n borderBottomColor: 'green',\r\n },\r\n '& .MuiOutlinedInput-root': {\r\n '& fieldset': {\r\n borderColor: '#a8a9ad',\r\n },\r\n // '&:hover fieldset': {\r\n // borderColor: 'yellow',\r\n // },\r\n '&.Mui-focused fieldset': {\r\n borderColor: '#58585a',\r\n },\r\n },\r\n },\r\n})(TextField);\r\n\r\nexport default function TextFields(props) {\r\n//console.log(\"Text field props :\", props);\r\n return (\r\n \r\n );\r\n}\r\n","import Dexie from 'dexie';\r\nimport Cookies from 'js-cookie';\r\nexport default class DbTasks {\r\n constructor() {\r\n this.db = new Dexie(\"mitarbeiterApp\");\r\n\r\n this.db.version(1).stores({ notifications: '++id' });\r\n this.db.version(2).stores({ notifications: '++id, seen'})\r\n }\r\n\r\n getRequestOption = (method, data, useContentType) => {\r\n const jwt = Cookies.get('__session');\r\n const requestOption = {\r\n \"crossDomain\": true,\r\n \"method\": method,\r\n \"mode\": \"cors\", // no-cors, cors, *same-origin\r\n \"headers\": {\r\n \"cache-control\": \"no-cache\",\r\n \"Access-Control-Allow-Origin\": \"*\",\r\n \"Authorization\": 'Bearer ' + jwt\r\n },\r\n \"credintials\": \"include\",\r\n // \"body\": JSON.stringify({ ...data })\r\n }\r\n if (useContentType) requestOption.headers[\"content-type\"] = \"application/json; charset=utf-8\";\r\n if (method === \"POST\") requestOption.body = JSON.stringify({ ...data });\r\n return requestOption;\r\n };\r\n\r\n login = async (username, password, settings) => {\r\n const jwt = Cookies.get('__session');\r\n const requestOptions = {\r\n \"crossDomain\": true,\r\n \"method\": \"POST\",\r\n \"mode\": \"cors\", // no-cors, cors, *same-origin\r\n \"headers\": {\r\n \"content-type\": \"application/json; charset=utf-8\",\r\n \"cache-control\": \"no-cache\",\r\n \"Access-Control-Allow-Origin\": \"*\",\r\n \"Authorization\": 'Bearer ' + jwt,\r\n },\r\n \"credintials\": \"include\",\r\n //\"body\": \"password=\" + password + \"&username=\" + username\r\n \"body\": JSON.stringify({ username: username, password: password })\r\n };\r\n\r\n // return {\r\n // name: \"Grogot\",\r\n // lastName: \"Test\",\r\n // error: \"\"\r\n // }\r\n\r\n\r\n\r\n return fetch(`${process.env.REACT_APP_LOCAL_API_URL}api/User/Authenticate`, requestOptions)\r\n //return fetch('https://localhost:44383/User/authenticate', requestOptions)\r\n .then(this.handleResponse)\r\n .then(async user => {\r\n // store user details and jwt token in local storage to keep user logged in between page refreshes\r\n // localStorage.setItem('token', user.token);\r\n // localStorage.setItem('refreshToken', user.refreshToken);\r\n // let parsedToken = await this.parseJwt(user.token);\r\n\r\n // let ret = {\r\n // UserId: parsedToken.UserId,\r\n // Username: parsedToken.unique_name,\r\n // Password: password,\r\n // Token: user.access_token,\r\n // LanguageId: parsedToken.LanguageId,\r\n // TokenValidTime: moment(new Date()).add(10, 'm').format('YYYY-MM-DD HH:mm:ss'),\r\n // KeepLoggedIn: true\r\n // }\r\n console.log(\"User token\", user);\r\n Cookies.set('__session', user.token, { secure: true });\r\n\r\n fetch(`${process.env.REACT_APP_LOCAL_API_URL}api/FirmaInfo`, this.getRequestOption(\"GET\", {}, false))\r\n .then(() => console.log(\"Subscribed to db changes.\"))\r\n .catch((err) => console.log(\"Subscription to db changes failed \", err));\r\n\r\n return user;\r\n })\r\n .catch(function (err) {\r\n let retVal = { error: \"SERVICE_FAILED\" }\r\n if(err !== \"\") retVal.error = err;\r\n return retVal;\r\n });\r\n }\r\n\r\n initialDataLoad = async () => {\r\n let dbNotifications = this.getAllNotifications();\r\n\r\n let res = [\r\n await dbNotifications\r\n ];\r\n\r\n return {\r\n notifications: res[0],\r\n }\r\n }\r\n\r\n async getAllNotifications() {\r\n let notifications = await this.db.table(\"notifications\").toArray();\r\n let sorted = notifications.sort((a,b) => b.id - a.id);\r\n return sorted;\r\n }\r\n\r\n handleResponse = async response => {\r\n return response.text().then(text => {\r\n const data = text && JSON.parse(text);\r\n if (!response.ok) {\r\n if (response.status === 401) {\r\n // auto logout if 401 response returned from api\r\n this.logout();\r\n // location.reload(true);\r\n }\r\n\r\n const error = (data && data.message) || response.statusText;\r\n return Promise.reject(error);\r\n }\r\n\r\n return data;\r\n });\r\n }\r\n\r\n getDataFromApi = async () => {\r\n // const requestOptions = {\r\n // //\"crossDomain\": true,\r\n // \"method\": \"GET\",\r\n // \"mode\": \"cors\", // no-cors, cors, *same-origin\r\n // \"headers\": {\r\n // \"content-type\": \"application/json; charset=utf-8\",\r\n // // \"cache-control\": \"no-cache\",\r\n // // \"Access-Control-Allow-Origin\": \"*\",\r\n // },\r\n // //\"credintials\": \"include\",\r\n // //\"body\": \"password=\" + password + \"&username=\" + username\r\n // //\"body\": JSON.stringify({ })\r\n // };\r\n\r\n // // return {\r\n // // name: \"Grogot\",\r\n // // lastName: \"Test\",\r\n // // error: \"\"\r\n // // }\r\n\r\n // return await fetch('https://localhost:5001/WeatherForecast', requestOptions)\r\n // .then(res => res.json())\r\n // .then(res => res);\r\n // }\r\n\r\n\r\n // let connection = new signalR.HubConnectionBuilder().withUrl(\"https://192.168.1.157:44393/Hubs/NotificationHub\").build()\r\n\r\n // connection.start()\r\n\r\n // connection.on(\"refreshBannerText\", function () {\r\n // this.loadData()\r\n // })\r\n\r\n // this.loadData();\r\n }\r\n\r\n loadData = async () => {\r\n\r\n // $.ajax({\r\n // url: 'http://localhost:53777/api/home',\r\n // method: 'GET',\r\n // success: (result)=>{\r\n // $('body').append('
' + result + '
');\r\n // },\r\n // error: (error)=>{\r\n // console.log(error)\r\n // }\r\n // })\r\n\r\n const requestOptions = {\r\n //\"crossDomain\": true,\r\n \"method\": \"GET\",\r\n \"mode\": \"cors\", // no-cors, cors, *same-origin\r\n \"headers\": {\r\n \"content-type\": \"application/json; charset=utf-8\",\r\n // \"cache-control\": \"no-cache\",\r\n // \"Access-Control-Allow-Origin\": \"*\",\r\n },\r\n //\"credintials\": \"include\",\r\n //\"body\": \"password=\" + password + \"&username=\" + username\r\n //\"body\": JSON.stringify({ })\r\n };\r\n\r\n // return {\r\n // name: \"Grogot\",\r\n // lastName: \"Test\",\r\n // error: \"\"\r\n // }\r\n\r\n return await fetch(`${process.env.REACT_APP_LOCAL_API_URL}api/home`, requestOptions)\r\n .then(res => res.json())\r\n .then(res => console.log(res));\r\n\r\n\r\n }\r\n\r\n getDataFromDb = async (url, data, settings) => {\r\n\r\n let response = await fetch(`${process.env.REACT_APP_LOCAL_API_URL}${url}`, this.getRequestOption(settings.method, data, true))\r\n if (response.ok) {\r\n let res = await response.json();\r\n return res;\r\n }\r\n // else{\r\n // return this.tryToGetNewToken(response, () => this.getDataFromDb(url,data));\r\n // }\r\n }\r\n\r\n async addNotification(data) {\r\n let id = await this.db.table(\"notifications\").put({\r\n text: data.text,\r\n seen: 0,\r\n type: data.type,\r\n description: data.description,\r\n createdDate: new Date()\r\n });\r\n\r\n return { id, text: data.text, seen: false, type: data.type, createdDate: new Date(), description: data.description }\r\n }\r\n\r\n async markNotificationAsRead(id) {\r\n let deleteSeen = await this.db.table(\"notifications\").where({\"seen\": 1}).delete();\r\n let notificationSuccess = await this.db.table(\"notifications\").update(id, { seen: 1 });\r\n if (notificationSuccess) return this.db.table(\"notifications\").toArray();\r\n\r\n return [];\r\n }\r\n\r\n _base64ToArrayBuffer(base64) {\r\n let _b64 = base64;\r\n if (_b64.startsWith(\"data:image/jpeg;base64,\")) _b64 = _b64.substring(23);\r\n if (_b64.startsWith(\"data:image/png;base64,\")) _b64 = _b64.substring(22);\r\n let raw = window.atob(_b64);\r\n let rawLength = raw.length;\r\n let array = new Uint8Array(new ArrayBuffer(rawLength));\r\n\r\n for (let i = 0; i < rawLength; i++) {\r\n array[i] = raw.charCodeAt(i);\r\n }\r\n return new Blob([array]);\r\n }\r\n\r\n async dataUpload(data) {\r\n let formData = new FormData();\r\n\r\n let blobData = data.Attachments.map(item => { return { blobData: this._base64ToArrayBuffer(item.data), fileName: item.fileName } });\r\n // this._base64ToArrayBuffer(data.Attachments);\r\n blobData.forEach(function (item) {\r\n formData.append(\"Attachments\", item.blobData, item.fileName);\r\n });\r\n\r\n // formData.append(\"Attachments[]\", blobData);\r\n // data.map(item => {\r\n // console.log(\"Data upload item : \", item);\r\n // })\r\n // formData.append(\"BeraterId\", data.BeraterId);\r\n // formData.append(\"Subject\", data.Subject);\r\n\r\n Object.keys(data).map(item => {\r\n if(item !== \"Attachments\"){\r\n Object.keys(data).map(item => formData.append(item, data[item]))\r\n }\r\n return item;\r\n });\r\n\r\n\r\n\r\n //let jwtToken = this.getJwtToken();\r\n const requestOptions = {\r\n \"crossDomain\": true,\r\n \"method\": \"POST\",\r\n \"mode\": \"cors\", // no-cors, cors, *same-origin\r\n \"headers\": {\r\n \"cache-control\": \"no-cache\",\r\n \"Access-Control-Allow-Origin\": \"*\",\r\n //\"Authorization\": 'Bearer ' + jwtToken\r\n },\r\n //\"credintials\": \"include\",\r\n \"body\": formData\r\n };\r\n //+ \"&grant_type=password\"\r\n let response = await fetch(`${process.env.REACT_APP_LOCAL_API_URL}${data.endpoint}`, requestOptions);\r\n if (response.ok) {\r\n let res = await response.json();\r\n return res;\r\n } else return false;\r\n\r\n }\r\n\r\n}","//User\r\nexport const LOGIN_REQUEST = 'USERS_LOGIN_REQUEST';\r\nexport const LOGIN_SUCCESS = 'USERS_LOGIN_SUCCESS';\r\nexport const LOGIN_FAILURE = 'USERS_LOGIN_FAILURE';\r\nexport const LOGOUT = 'USERS_LOGOUT';\r\n\r\n////APP\r\nexport const TOGGLE_DRAWER = \"TOGGLE_DRAWER\";\r\nexport const SET_TITLE = \"SET_TITLE\";\r\nexport const INITIALISE_STATE = \"INITIALISE_STATE\";\r\nexport const CHANGE_FILTER = \"CHANGE_FILTER\";\r\nexport const TOGGLE_SPINNER = \"TOGGLE_SPINNER\";\r\n\r\n////DB \r\n\r\n\r\n////Notifications\r\nexport const ADD_NEW_NOTIFICATION = 'ADD_NEW_NOTIFICATION';\r\nexport const MARK_NOTIFICATION_AS_READ = \"MARK_NOTIFICATION_AS_READ\";\r\n\r\n//Service worker\r\nexport const SW_INIT = 'SW_INIT';\r\nexport const SW_UPDATE = 'SW_UPDATE';\r\nexport const INSTALL_APP = 'INSTALL_APP';\r\nexport const SHOW_INSTALL_PROMPT = 'SHOW_INSTALL_PROMPT';","import dbTasks from '../db/DbTasks';\r\nimport { LOGIN_SUCCESS, LOGIN_FAILURE, LOGOUT, LOGIN_REQUEST } from '../actions/Types';\r\n\r\nexport const userLogin = async(username, password, settings) => {\r\n const user = await new dbTasks().login(username, password, settings);\r\n\r\n return dispatch => {\r\n return LOGIN_SUCCESS(user)\r\n };\r\n\r\n function request(user) { return { type: LOGIN_REQUEST, user}}\r\n function success(user) { return { type: LOGIN_SUCCESS, user}}\r\n function failure(user) { return { type: LOGIN_FAILURE, user}}\r\n\r\n}","import React, { useState, } from 'react'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport CustomTextField from './Reusable/TextFields';\r\n// import style from '../assets/styles/Login.module.css';\r\nimport { userLogin } from '../actions/UserActions';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { green } from '@material-ui/core/colors';\r\nimport clsx from 'clsx';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n minHeight: '70vh',\r\n maxWidth: '100%',\r\n overflowX: 'hidden',\r\n margin: theme.spacing(0),\r\n \r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\",\r\n \r\n },\r\n elementSpacing: {\r\n margin: theme.spacing(1)\r\n },\r\n button: {\r\n backgroundColor: \"#166abd\",\r\n '&:hover': {\r\n backgroundColor: \"#166abd\",\r\n },\r\n color: \"#FFFFFF\",\r\n fontSize: \"22px\",\r\n margin: theme.spacing(1)\r\n },\r\n wrapper: {\r\n margin: theme.spacing(0),\r\n position: 'relative',\r\n },\r\n buttonSuccess: {\r\n backgroundColor: \"#3cb498\",\r\n '&:hover': {\r\n backgroundColor: \"#0eb58e\",\r\n },\r\n color: \"#FFFFFF\",\r\n fontSize: \"22px\",\r\n margin: theme.spacing(1)\r\n },\r\n fabProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: -6,\r\n left: -6,\r\n zIndex: 1,\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n logo:{\r\n maxHeight: '100%',\r\n maxWidth: '100%',\r\n }\r\n}));\r\n\r\nconst Login = (props) => {\r\n const classes = useStyles();\r\n const [loading, setLoading] = React.useState(false);\r\n const [success, setSuccess] = React.useState(false);\r\n let [benutzer, setName] = useState(\"\");\r\n let [passwort, setPasswort] = useState(\"\");\r\n //const timer = React.useRef();\r\n\r\n // React.useEffect(() => {\r\n // return () => {\r\n // clearTimeout(timer.current);\r\n // };\r\n // }, []);\r\n\r\n const buttonClassname = clsx({\r\n [classes.buttonSuccess]: success,\r\n [classes.button]: !success\r\n });\r\n\r\n const logIn = async (localProps) => {\r\n if (!loading) {\r\n setSuccess(false);\r\n setLoading(true);\r\n // timer.current = setTimeout(() => {\r\n // setSuccess(true);\r\n // setLoading(false);\r\n // }, 2000);\r\n }\r\n //console.log(\"Login this :\", this);\r\n if (navigator.onLine === false) {\r\n alert(\"You're offline. Service unavailable !\");\r\n return;\r\n }\r\n\r\n let loginReturn = await userLogin(benutzer, passwort, null);\r\n setSuccess(true);\r\n setLoading(false);\r\n console.log(\"Login return :\", loginReturn);\r\n\r\n localProps.history.push(\"/home\");\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n {/* \"Logo\" */}\r\n {/*
*/}\r\n
\r\n \"Window-ID\"\r\n
\r\n {/*
*/}\r\n
\r\n \r\n setName(benutzer = e.currentTarget.value)}\r\n value={benutzer}\r\n id=\"benutzer\"\r\n type=\"text\"\r\n label=\"Benutzer\"\r\n variant=\"outlined\"\r\n fullWidth={true}\r\n class={classes.elementSpacing}\r\n // class={style.margin} \r\n />\r\n\r\n setPasswort(passwort = e.currentTarget.value)} \r\n value={passwort}\r\n id=\"password\"\r\n type=\"password\"\r\n label=\"Passwort\"\r\n variant=\"outlined\"\r\n fullWidth={true}\r\n onKeyPress={(e) => {\r\n if(e.key === \"Enter\"){\r\n logIn(props);\r\n }\r\n }}\r\n class={classes.elementSpacing}\r\n // style={style.textField} \r\n />\r\n\r\n {/*
*/}\r\n
\r\n logIn(props)}\r\n className={buttonClassname}\r\n //className={style.loginBtn}\r\n variant=\"contained\" fullWidth >\r\n LOGIN\r\n \r\n {loading && }\r\n
\r\n {/*
*/}\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\n\r\nexport default Login;\r\n","import Cookies from 'js-cookie';\r\n\r\nexport const getSession = () => {\r\n const jwt = Cookies.get('__session')\r\n let session\r\n try {\r\n if (jwt) {\r\n const base64Url = jwt.split('.')[1]\r\n const base64 = base64Url.replace('-', '+').replace('_', '/')\r\n // what is window.atob ?\r\n // https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/atob\r\n session = JSON.parse(window.atob(base64))\r\n }\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n return session\r\n }\r\n export const logOut = () => {\r\n Cookies.remove('__session');\r\n window.location.reload();\r\n }\r\n\r\n export const getBeraterId = () => {\r\n let cookie = getSession();\r\n return parseInt(cookie.nameid);\r\n }\r\n\r\n export const imageToDataUri = (img, width, height, extension) => {\r\n\r\n // create an off-screen canvas\r\n var canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d');\r\n\r\n // set its dimension to target size\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // draw source image into the off-screen canvas:\r\n ctx.drawImage(img, 0, 0, width, height);\r\n\r\n // encode image to data-uri with base64 version of compressed image\r\n if (extension === \".png\") {\r\n return canvas.toDataURL('image/png', 0.2);\r\n } else {\r\n return canvas.toDataURL('image/jpeg', 0.2);\r\n }\r\n\r\n}\r\n\r\nexport const getBase64 = file => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n //reader.onload = () => resolve(reader.result);\r\n reader.onload = () => {\r\n const img = new Image();\r\n img.src = reader.result;\r\n img.onload = () => {\r\n let extension = img.src.startsWith('data:image/png') === true ? \".png\" : \".jpg\";\r\n var newDataUri = imageToDataUri(img, img.width, img.height, extension);\r\n resolve(newDataUri);\r\n };\r\n\r\n reader.onerror = error => reject(error);\r\n };\r\n reader.onerror = error => reject(error);\r\n });\r\n};","import React from 'react';\r\nimport { Route, Redirect } from 'react-router-dom';\r\nimport { getSession } from '../helpers/HelperFunctions';\r\n\r\nexport const PrivateRoute = ({ component: Component, ...rest }) => (\r\n \r\n (\r\n // \r\n getSession() ? : \r\n )} />\r\n)","import DbTasks from '../db/DbTasks';\r\nimport { INITIALISE_STATE, INSTALL_APP, SHOW_INSTALL_PROMPT } from '../actions/Types';\r\n\r\nimport {\r\n TOGGLE_DRAWER,\r\n SET_TITLE,\r\n TOGGLE_SPINNER,\r\n} from \"./Types\";\r\n\r\nexport const toggleDrawer = val => {\r\n return {\r\n type: TOGGLE_DRAWER,\r\n payload: val\r\n };\r\n};\r\n\r\nexport const setTitle = val => {\r\n return {\r\n type: SET_TITLE,\r\n payload: val\r\n };\r\n};\r\n\r\nexport const setInitialDataFromLocalDb = () => async dispatch => {\r\n let data = await new DbTasks().initialDataLoad();\r\n\r\n dispatch({\r\n type: INITIALISE_STATE,\r\n payload: data\r\n })\r\n}\r\n\r\nexport const getDataFromApi = () => async dispatch => {\r\n let data = await new DbTasks().loadData();\r\n\r\n // return dispatch => {\r\n dispatch({\r\n type: INITIALISE_STATE,\r\n payload: data\r\n }); \r\n}\r\n\r\nexport const toggleSpinner = val => {\r\n return {\r\n type: TOGGLE_SPINNER,\r\n payload: val\r\n };\r\n};\r\n\r\nexport const InstallPrompt = (param) => {\r\n return {\r\n type: INSTALL_APP,\r\n payload: param\r\n }\r\n}\r\n\r\nexport const InstallShowed = () => {\r\n return {\r\n type: SHOW_INSTALL_PROMPT,\r\n payload: true\r\n } \r\n}","import React, { useEffect, useState } from 'react';\r\nimport { Button } from '@material-ui/core';\r\nimport { getDataFromApi } from '../actions/AppActions';\r\nimport { useDispatch } from \"react-redux\";\r\nimport { withRouter } from 'react-router-dom';\r\nimport DbTasks from '../db/DbTasks';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport moment from 'moment';\r\n\r\nconst useStyles = makeStyles({\r\n table: {\r\n minWidth: 450,\r\n maxWidth: 650,\r\n },\r\n\r\n});\r\n\r\nfunction Home(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const [birthdays, setBirthdays] = useState([]);\r\n\r\n useEffect(() => {\r\n new DbTasks().getDataFromDb(\"api/FirmaInfo/GetBirthdays\", {}, { method: \"GET\" })\r\n .then(res => {\r\n console.log(\"Birthdays, :\", res);\r\n setBirthdays(res);\r\n })\r\n\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n\r\n\r\n return (\r\n
\r\n\r\n \r\n \r\n \r\n \r\n \r\n Geburtstagsliste\r\n \r\n \r\n \r\n Name\r\n Termin\r\n Date\r\n {/* Carbs (g)\r\n Protein (g) */}\r\n \r\n \r\n \r\n {birthdays.map((row) => (\r\n \r\n \r\n {row.fullName}\r\n \r\n {row.geburtstag !== null ? moment(row.geburtstag).format(\"DD.MM.YYYY\") : \"\"}\r\n {row.termin}\r\n {/* {row.carbs}\r\n {row.protein} */}\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(Home);\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport Collapse from '@material-ui/core/Collapse';\r\nimport DraftsIcon from '@material-ui/icons/Drafts';\r\nimport ExpandLess from '@material-ui/icons/ExpandLess';\r\nimport ExpandMore from '@material-ui/icons/ExpandMore';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport Box from '@material-ui/core/Box';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport Badge from '@material-ui/core/Badge';\r\nimport { Chat, Info, Schedule, Event, Today, FlightTakeoff, LocalHospital, Euro, CalendarToday, PhotoLibrary } from '@material-ui/icons';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { FaIdCardAlt } from 'react-icons/fa';\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\n\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n maxWidth: 360,\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n nested: {\r\n paddingLeft: theme.spacing(4),\r\n },\r\n}));\r\n\r\nfunction NestedList(props) {\r\n const classes = useStyles();\r\n const [state, setOpen] = React.useState({\r\n firmaOpen: false,\r\n leistungOpen: false,\r\n wegOpen: false\r\n });\r\n\r\n const dispatch = useDispatch();\r\n const [menuState, setMenuState] = useState({\r\n wegweisserList: [],\r\n privateEvent: 0,\r\n publicEvent: 0 \r\n })\r\n //const [wegweisserList, setWegweisserList] = useState([]);\r\n const version = useSelector(state => state.app.version);\r\n let beraterId = getBeraterId();\r\n\r\n useEffect(() => {\r\n new DbTasks().getDataFromDb(`api/Wegweisser/WegParent`, {}, { method: \"GET\" })\r\n .then(res => {\r\n //setMenuState({...menuState, wegweisserList: res});\r\n return res;\r\n //setWegweisserList(res);\r\n }).then((wegList) => new DbTasks().getDataFromDb(`api/FirmaInfo/GetEventNotifications`, {BeraterId: beraterId}, { method: \"POST\" })\r\n .then(res => {\r\n setMenuState({...menuState, privateEvent: res.veran, publicEvent: res.allgemein, wegweisserList: wegList});\r\n //console.log(\"Event notifiaction data : \", res); \r\n }));\r\n }, []);\r\n\r\n const handleClick = (prop) => {\r\n switch (prop) {\r\n case \"firmainfo\":\r\n setOpen({ ...state, firmaOpen: !state.firmaOpen });\r\n break;\r\n case \"leistung\":\r\n setOpen({ ...state, leistungOpen: !state.leistungOpen });\r\n break;\r\n case \"wegOpen\":\r\n setOpen({ ...state, wegOpen: !state.wegOpen });\r\n break;\r\n default:\r\n break;\r\n }\r\n //setOpen(!open);\r\n };\r\n\r\n const redirectTo = (url) => {\r\n props.history.push(\"/\" + url);\r\n dispatch(props.menuOpen(false))\r\n }\r\n\r\n\r\n\r\n let firmaOpen = state.firmaOpen, leistungOpen = state.leistungOpen, wegOpen = state.wegOpen;\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
MitarbeiterApp
{version}
\r\n
\r\n \r\n dispatch(props.menuOpen(false))}\r\n aria-label=\"close\" className={classes.closeButton}>\r\n \r\n \r\n \r\n
\r\n
\r\n }\r\n className={classes.root}\r\n >\r\n \r\n \r\n \r\n\r\n\r\n \r\n \r\n {/* */}\r\n \r\n handleClick(\"firmainfo\")}>\r\n \r\n \r\n \r\n \r\n {firmaOpen ? : }\r\n \r\n \r\n \r\n redirectTo(\"arbeitszeit\")}>\r\n \r\n \r\n \r\n \r\n \r\n\r\n redirectTo(\"veranstaltungen\")}>\r\n \r\n \r\n \r\n \r\n {menuState.privateEvent > 0 && }\r\n \r\n\r\n redirectTo(\"allgemein\")}>\r\n \r\n \r\n \r\n \r\n {menuState.publicEvent > 0 && }\r\n \r\n\r\n \r\n \r\n\r\n redirectTo(\"urlaub\")}>\r\n \r\n \r\n \r\n \r\n \r\n\r\n redirectTo(\"krankenmeldung\")}>\r\n \r\n \r\n \r\n \r\n \r\n\r\n handleClick(\"leistung\")}>\r\n \r\n \r\n \r\n \r\n {leistungOpen ? : }\r\n \r\n \r\n \r\n redirectTo(\"tagesleistung/-1\")}>\r\n \r\n \r\n \r\n \r\n \r\n\r\n redirectTo(\"monatsleistung\")}>\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n redirectTo(\"kvp\")}>\r\n \r\n \r\n \r\n \r\n \r\n handleClick(\"wegOpen\")}>\r\n \r\n \r\n \r\n \r\n {wegOpen ? : }\r\n \r\n {menuState.wegweisserList.length > 0 && (\r\n \r\n \r\n {menuState.wegweisserList.map(item =>\r\n redirectTo(`wegparent/${item.id}`)}>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n )}\r\n {/* redirectTo(\"wegweisser\")}>\r\n \r\n \r\n \r\n \r\n */}\r\n\r\n redirectTo(\"gallery\")}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default withRouter(NestedList);\r\n","import React from 'react'\r\nimport { Button } from '@material-ui/core';\r\nimport { Update } from '../bundles/IconsBundle';\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport default function UpdateComponent() {\r\n const sw = useSelector(state => state.app.serviceWorkerRegistration);\r\n const updateServiceWorker = (e, app) => {\r\n \r\n //const sw = app.serviceWorkerRegistration;\r\n console.log(\"Sw 1: \", sw);\r\n if (sw) {\r\n console.log(\"Sw 2: \", sw);\r\n const registrationWaiting = sw.waiting;\r\n if (registrationWaiting) {\r\n console.log(\"registration waiting skip waiting:\", registrationWaiting);\r\n registrationWaiting.postMessage({ type: 'SKIP_WAITING' });\r\n\r\n // window.ServiceWorker.addEventListener(\"install\", event => {\r\n // console.log(\"Install event :\", event);\r\n // window.ServiceWorker.skipWaiting()\r\n // })\r\n // registrationWaiting.skipWaiting();\r\n\r\n\r\n\r\n registrationWaiting.addEventListener('statechange', e => {\r\n console.log(\"Statechange\", e);\r\n if (e.target.state === 'activated') {\r\n window.location.reload();\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n Update\r\n \r\n )\r\n}","import React, { useEffect } from 'react';\r\nimport clsx from 'clsx';\r\nimport SwipeableDrawer from '@material-ui/core/SwipeableDrawer';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport MailIcon from '@material-ui/icons/Mail';\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport {\r\n MenuIcon,\r\n NotificationsIcon\r\n} from \"../../bundles/IconsBundle\";\r\nimport NestedList from '../Reusable/TreeView';\r\nimport { toggleDrawer, setInitialDataFromLocalDb } from '../../actions/AppActions';\r\nimport { useSelector, useDispatch } from 'react-redux'\r\nimport { fade, makeStyles } from '@material-ui/core/styles';\r\n\r\nimport Badge from '@material-ui/core/Badge';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport AccountCircle from '@material-ui/icons/AccountCircle';\r\nimport MoreIcon from '@material-ui/icons/MoreVert';\r\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\r\nimport { logOut } from '../../helpers/HelperFunctions';\r\nimport { withRouter } from 'react-router-dom';\r\n\r\nimport UpdateButton from '../Update';\r\n// const useStyles = makeStyles({\r\n// list: {\r\n// width: 250,\r\n// },\r\n// fullList: {\r\n// width: 'auto',\r\n// },\r\n// });\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(2),\r\n },\r\n title: {\r\n display: 'none',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'block',\r\n },\r\n },\r\n notificationMenu: {\r\n width: 230,\r\n },\r\n search: {\r\n position: 'relative',\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n '&:hover': {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n marginRight: theme.spacing(2),\r\n marginLeft: 0,\r\n width: '100%',\r\n [theme.breakpoints.up('sm')]: {\r\n marginLeft: theme.spacing(3),\r\n width: 'auto',\r\n },\r\n },\r\n searchIcon: {\r\n padding: theme.spacing(0, 2),\r\n height: '100%',\r\n position: 'absolute',\r\n pointerEvents: 'none',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n inputRoot: {\r\n color: 'inherit',\r\n },\r\n inputInput: {\r\n padding: theme.spacing(1, 1, 1, 0),\r\n // vertical padding + font size from searchIcon\r\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\r\n transition: theme.transitions.create('width'),\r\n width: '100%',\r\n [theme.breakpoints.up('md')]: {\r\n width: '20ch',\r\n },\r\n },\r\n sectionDesktop: {\r\n display: 'none',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'flex',\r\n },\r\n },\r\n sectionMobile: {\r\n display: 'flex',\r\n [theme.breakpoints.up('md')]: {\r\n display: 'none',\r\n },\r\n },\r\n}));\r\n\r\nfunction SwipeableTemporaryDrawer(props) {\r\n //const classes = useStyles();\r\n // const [state, setState] = React.useState({\r\n // left: false,\r\n // });\r\n let dispatch = useDispatch();\r\n let drawerOpen = useSelector(state => state.app.drawerOpen) || false;\r\n\r\n // const toggleDrawerLocal = (anchor, open) => (event) => {\r\n // if (event && event.type === 'keydown' && (event.key === 'Tab' || event.key === 'Shift')) {\r\n // return;\r\n // }\r\n\r\n // //setState({ ...state, [anchor]: open });\r\n // };\r\n\r\n useEffect(() => {\r\n\r\n //Load data from local database into state\r\n dispatch(setInitialDataFromLocalDb());\r\n\r\n\r\n //dispatch(setInitialDataFromLocalDb());\r\n return () => {\r\n console.log(\"Cleanup function running !\");\r\n\r\n }\r\n }, []);\r\n\r\n let showUpdateBtn = useSelector(state => state.app.serviceWorkerUpdated);\r\n\r\n\r\n const signOut = () => {\r\n logOut()\r\n }\r\n\r\n const list = (anchor) => (\r\n dispatch(toggleDrawer(true))}\r\n // onKeyDown={() => dispatch(toggleDrawer(true))}\r\n >\r\n \r\n {/* \r\n {['Chat', 'FirmaInfo', 'Urlaub', 'Krankenmeldung', 'Leistungspremie', 'KVP', 'Wegweisser', 'Gallerie'].map((text, index) => (\r\n \r\n {index % 2 === 0 ? : }\r\n \r\n \r\n ))}\r\n */}\r\n \r\n
\r\n );\r\n\r\n const classes = useStyles();\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const [anchorElNotification, setAnchorNotification] = React.useState(null);\r\n const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = React.useState(null);\r\n\r\n const isMenuOpen = Boolean(anchorEl);\r\n const isNotificationMenuOpen = Boolean(anchorElNotification);\r\n const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);\r\n\r\n const handleProfileMenuOpen = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleMobileMenuClose = () => {\r\n setMobileMoreAnchorEl(null);\r\n };\r\n\r\n const handleMenuClose = () => {\r\n setAnchorEl(null);\r\n handleMobileMenuClose();\r\n setAnchorNotification(null);\r\n };\r\n\r\n // const handleNotificationMenuClose = (event) => {\r\n // setAnchorNotification(null);\r\n\r\n // }\r\n\r\n const handleMobileMenuOpen = (event) => {\r\n setMobileMoreAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleNotificationsMenuOpen = (event) => {\r\n setAnchorNotification(event.currentTarget)\r\n }\r\n\r\n let notificationList = useSelector(state => state.notifications.list) || [];\r\n if (notificationList.length > 0) notificationList = notificationList.filter(e => e.seen === 0);\r\n //console.log(\"Notification list : \", notificationList);\r\n\r\n const menuId = 'primary-search-account-menu';\r\n const renderMenu = (\r\n \r\n Profile\r\n My account\r\n Sign out\r\n \r\n );\r\n\r\n const renderMenuNotifications = (\r\n \r\n {notificationList && notificationList.map(item => {\r\n return (\r\n \r\n \r\n \r\n \r\n {item.text}\r\n \r\n )\r\n })}\r\n props.history.push(\"/notifications\")}>\r\n {/* \r\n \r\n */}\r\n \r\n {\"Notifications center\"}\r\n \r\n \r\n\r\n {/* Note 2 */}\r\n \r\n );\r\n\r\n const mobileMenuId = 'primary-search-account-menu-mobile';\r\n const renderMobileMenu = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Messages

\r\n
\r\n props.history.push(\"/notifications\")}>\r\n \r\n \r\n \r\n \r\n \r\n

Notifications

\r\n
\r\n \r\n \r\n \r\n \r\n

Profile

\r\n
\r\n \r\n );\r\n\r\n return (\r\n
\r\n \r\n \r\n dispatch(toggleDrawer(true))}\r\n edge=\"start\"\r\n className={classes.menuButton}\r\n color=\"inherit\"\r\n aria-label=\"open drawer\"\r\n >\r\n \r\n \r\n \r\n MitarbeiterApp\r\n \r\n \r\n dispatch(toggleDrawer(true))}\r\n onOpen={() => dispatch(toggleDrawer(true))}\r\n >\r\n {list(\"left\")}\r\n \r\n {/*
\r\n
\r\n \r\n
\r\n \r\n
*/}\r\n
\r\n
\r\n {showUpdateBtn && \r\n }\r\n {/* \r\n \r\n \r\n \r\n */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n {showUpdateBtn && }\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {renderMobileMenu}\r\n {renderMenu}\r\n {renderMenuNotifications}\r\n
\r\n );\r\n}\r\n\r\nexport default withRouter(SwipeableTemporaryDrawer);\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Card from '@material-ui/core/Card';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport clsx from 'clsx';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(0),\r\n //fontFamily: 'sans-serif',\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 70,\r\n //margin: theme.spacing(1),\r\n backgroundColor: '#8992d7',\r\n color: '#FFFFFF',\r\n textTransform: 'uppercase',\r\n textAlign: 'left',\r\n fontWeight: 'bold',\r\n padding: 0,\r\n // position: 'relative', \r\n },\r\n paper: {\r\n padding: theme.spacing(1),\r\n textAlign: 'left',\r\n color: '#FFFFFF',\r\n // backgroundColor: '#8992d7'\r\n },\r\n bullet: {\r\n display: 'inline-block',\r\n margin: '0 2px',\r\n transform: 'scale(0.8)',\r\n },\r\n title: {\r\n fontSize: '0.8em',\r\n textAlign: 'left',\r\n fontWeight: 'bold'\r\n\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n fontSize: 10\r\n },\r\n green: {\r\n backgroundColor: '#79c350'\r\n },\r\n red: {\r\n backgroundColor: '#f06292'\r\n },\r\n blue: {\r\n backgroundColor: '#45bbdf'\r\n },\r\n palm: {\r\n height: 40\r\n },\r\n circleStyle: {\r\n //padding:10,\r\n //marginTop: 0,\r\n //marginRight: '30%',\r\n //marginLeft: 0,\r\n //display: \"inline-block\",\r\n // position:'absolute',\r\n backgroundColor: '#FFFFFF',\r\n borderRadius: \"50%\",\r\n width: 50,\r\n height: 50,\r\n //right: 0,\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n margin: 0,\r\n opacity: 0.3,\r\n position: 'absolute',\r\n\r\n },\r\n circle: {\r\n position: 'relative',\r\n width: 'inherit',\r\n height: 'inherit',\r\n textAlign: 'center'\r\n },\r\n button: {\r\n padding: theme.spacing(2),\r\n //margin: theme.spacing(1)\r\n },\r\n ravno: {\r\n textAlign: 'right'\r\n },\r\n iconContainer: {\r\n //paddingTop: 10,\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n width: 70,\r\n height: 70,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\"\r\n }\r\n}));\r\n\r\n\r\nexport default function CardContainerSmall(props) {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n {props.subtitle}: {props.number}\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n {props.mainIcon}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n}\r\n","import React from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { withRouter } from 'react-router-dom';\r\nimport { markAsRead } from '../../actions/NotificationActions';\r\nimport CardContainerSmall from '../Reusable/CardContainerSmall';\r\nimport { FaBell } from 'react-icons/fa';\r\nimport { Grid, makeStyles, Paper } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(1),\r\n //maxWidth: 400, \r\n //width: '100%',\r\n display: 'flex',\r\n alignContent: 'center',\r\n // alignItems: 'f'\r\n //fontFamily: 'sans-serif',\r\n },\r\n paper: {\r\n maxWidth: '100%',\r\n //margin: theme.spacing(1),\r\n //margin: `${theme.spacing(1)}px auto`,\r\n },\r\n \"@keyframes rotating\": {\r\n \"0%\": {\r\n //opacity: 0,\r\n // transform: \"translateY(-200%)\"\r\n transform: \"rotate(-45deg)\",\r\n },\r\n \"100%\": {\r\n //opacity: 1,\r\n // transform: \"translateY(0)\"\r\n transform: \"rotate(45deg)\",\r\n },\r\n },\r\n animatedItem: {\r\n animation: `$rotating 1000ms ${theme.transitions.easing.easeInOut} infinite alternate`\r\n },\r\n}));\r\n\r\nfunction NotificationList(props) {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const list = useSelector(state => state.notifications.list);\r\n \r\n const markNotificationAsRead = (id) => {\r\n dispatch(markAsRead(id));\r\n }\r\n\r\n return (\r\n
\r\n {/*

Notifications list :

*/}\r\n \r\n {list && list.length === 0 &&

There is no new notifications.

}\r\n {list.map((item, index) =>\r\n\r\n \r\n markNotificationAsRead(item.id)}>\r\n }\r\n />\r\n \r\n \r\n\r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(NotificationList);","import DbTasks from '../db/DbTasks';\r\nimport { ADD_NEW_NOTIFICATION, MARK_NOTIFICATION_AS_READ } from '../actions/Types';\r\n\r\nexport const addNewNotification = (param) => async dispatch => {\r\n console.log(\"Add new notification action : \");\r\n let data = await new DbTasks().addNotification(param);\r\n dispatch({\r\n type: ADD_NEW_NOTIFICATION,\r\n payload: data\r\n });\r\n}\r\n\r\nexport const markAsRead = (param) => async dispatch => {\r\n let data = await new DbTasks().markNotificationAsRead(param);\r\n if (data.length === 0) { console.log(\"Notification update went wrong !\"); return; }\r\n dispatch({\r\n type: MARK_NOTIFICATION_AS_READ,\r\n payload: data\r\n })\r\n}\r\n\r\n// function test(param){\r\n// return async function(dispatch){\r\n// dispatch({\r\n\r\n// })\r\n// }\r\n// }","import React from 'react';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Slide from '@material-ui/core/Slide';\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nexport default function AlertDialogSlide(props) {\r\n\r\n return (\r\n \r\n {props.title}\r\n \r\n \r\n {props.description}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport clsx from 'clsx';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n //fontFamily: 'sans-serif',\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 245,\r\n //margin: theme.spacing(1),\r\n backgroundColor: '#8992d7',\r\n color: '#FFFFFF',\r\n textTransform: 'uppercase',\r\n textAlign: 'left',\r\n fontWeight: 'bold'\r\n // position: 'relative', \r\n },\r\n paper: {\r\n padding: theme.spacing(0),\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n // backgroundColor: '#8992d7'\r\n },\r\n bullet: {\r\n display: 'inline-block',\r\n margin: '0 2px',\r\n transform: 'scale(0.8)',\r\n },\r\n title: {\r\n fontSize: '1em',\r\n textAlign: 'left',\r\n fontWeight: 'bold'\r\n\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n green: {\r\n backgroundColor: '#79c350'\r\n },\r\n red: {\r\n backgroundColor: '#f06292'\r\n },\r\n blue: {\r\n backgroundColor: '#45bbdf'\r\n },\r\n palm: {\r\n height: 40\r\n },\r\n circleStyle: {\r\n // //padding:10,\r\n // marginTop: 0,\r\n // //marginRight: '30%',\r\n // marginLeft: 0,\r\n // display: \"inline-block\",\r\n // // position:'absolute',\r\n // backgroundColor: '#FFFFFF',\r\n // borderRadius: \"50%\",\r\n // width: 100,\r\n // height: 100,\r\n // right: 0,\r\n // top: 0,\r\n // opacity: 0.3,\r\n // position: 'absolute',\r\n\r\n //container small\r\n backgroundColor: '#FFFFFF',\r\n borderRadius: \"50%\",\r\n width: 100,\r\n height: 100,\r\n //right: 0,\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n margin: 0,\r\n opacity: 0.3,\r\n position: 'absolute',\r\n },\r\n circle: {\r\n // position: 'relative',\r\n // textAlign: 'right',\r\n // marginRight: '20%',\r\n // paddingRight: 15,\r\n // paddingTop: 10\r\n //container small\r\n position: 'relative',\r\n width: 'inherit',\r\n height: 'inherit',\r\n textAlign: 'center'\r\n },\r\n button: {\r\n padding: theme.spacing(2),\r\n //margin: theme.spacing(1)\r\n },\r\n ravno: {\r\n textAlign: 'right'\r\n },\r\n iconContainer: {\r\n //paddingTop: 10,\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n width: 70,\r\n height: 70,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\"\r\n }\r\n}));\r\n\r\n\r\nexport default function CardContainer(props) {\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n {props.number}\r\n \r\n \r\n {props.subtitle}\r\n \r\n \r\n \r\n \r\n {/*
\r\n
\r\n
\r\n
\r\n {props.mainIcon}\r\n
\r\n
*/}\r\n
\r\n
\r\n
\r\n
\r\n {props.mainIcon}\r\n
\r\n {/* */}\r\n
\r\n
\r\n
\r\n {/* \r\n \r\n */}\r\n
\r\n )\r\n}\r\n","import React from 'react';\r\nimport Backdrop from '@material-ui/core/Backdrop';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: '#fff',\r\n },\r\n}));\r\n\r\nexport default function BackdropSpinner(props) {\r\n const classes = useStyles();\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nimport Button from '@material-ui/core/Button';\r\nimport DateRangePicker from '@wojtekmaj/react-daterange-picker';\r\nimport Dialog from '../Reusable/Dialog';\r\nimport moment from 'moment';\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { FaUmbrellaBeach } from 'react-icons/fa';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\nimport CardContainer from '../Reusable/CardContainer';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n //fontFamily: 'sans-serif',\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 245,\r\n //margin: theme.spacing(1),\r\n backgroundColor: '#8992d7',\r\n color: '#FFFFFF',\r\n textTransform: 'uppercase',\r\n textAlign: 'left',\r\n fontWeight: 'bold'\r\n // position: 'relative', \r\n\r\n },\r\n paper: {\r\n padding: theme.spacing(0),\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n // backgroundColor: '#8992d7'\r\n },\r\n bullet: {\r\n display: 'inline-block',\r\n margin: '0 2px',\r\n transform: 'scale(0.8)',\r\n },\r\n title: {\r\n fontSize: '1em',\r\n textAlign: 'left',\r\n fontWeight: 'bold'\r\n\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n green: {\r\n backgroundColor: '#79c350'\r\n },\r\n red: {\r\n backgroundColor: '#f06292'\r\n },\r\n blue: {\r\n backgroundColor: '#45bbdf'\r\n },\r\n palm: {\r\n height: 40\r\n },\r\n circleStyle: {\r\n marginTop: 0,\r\n marginRight: '0%',\r\n marginLeft: 0,\r\n display: \"inline-block\",\r\n backgroundColor: '#FFFFFF',\r\n borderRadius: \"50%\",\r\n width: 100,\r\n height: 100,\r\n right: 0,\r\n top: 0,\r\n opacity: 0.3,\r\n position: 'absolute',\r\n },\r\n circle: {\r\n position: 'relative',\r\n textAlign: 'right',\r\n marginRight: '20%'\r\n },\r\n button: {\r\n height: '100%',\r\n width: '100%'\r\n },\r\n ravno: {\r\n textAlign: 'right'\r\n }\r\n}));\r\n\r\n\r\nfunction Urlaub(props) {\r\n const classes = useStyles();\r\n const [localState, setLocalState] = useState({\r\n plannedDays: 0,\r\n availableDays: 0,\r\n usedDays: 0,\r\n overtimeHours: 0,\r\n showLoader: true,\r\n });\r\n // let [plannedDays, setPlannedDays] = useState(0);\r\n // let [availableDays, setAvailableDays] = useState(0);\r\n // let [usedDays, setUsedDays] = useState(14);\r\n // let [overtimeHours, setOvertime] = useState(54);\r\n\r\n const [open, setOpen] = React.useState(false);\r\n const [dateRange, setDateRange] = useState([new Date(), new Date()]);\r\n\r\n const handleDateChange = (date) => {\r\n if (date === null) setDateRange([new Date(), new Date()]);\r\n else setDateRange(date);\r\n };\r\n\r\n let beraterId = getBeraterId();\r\n\r\n const requestVacation = () => {\r\n console.log(\"Send request to server.\");\r\n new DbTasks().getDataFromDb(\"api/Urlaub/RequestUrlaub\", { \r\n beraterId: beraterId, \r\n startDate: new Date(new Date(dateRange[0]).setHours(7)), \r\n endDate: new Date(new Date(dateRange[1]).setHours(7)),\r\n }, \r\n { method: \"POST\" })\r\n .then(res => {\r\n console.log(\"Request res\", res);\r\n if(res) setOpen(false);\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n new DbTasks().getDataFromDb(\"api/Urlaub/GetUrlaubInfo\", { beraterId: beraterId }, { method: \"POST\" })\r\n .then(res => {\r\n // setAvailableDays(res.previousYearRest + res.currentYearAvailableDays - res.usedThisYear);\r\n var totalAvailable = res.previousYearRest + res.currentYearAvailableDays - res.usedThisYear\r\n // setPlannedDays(res.currentYearAvailableDays);\r\n // setUsedDays(res.usedThisYear);\r\n // setOvertime(res.overtimeHours);\r\n setLocalState({\r\n ...localState, \r\n availableDays: totalAvailable,\r\n plannedDays: res.currentYearAvailableDays,\r\n usedDays: res.usedThisYear,\r\n overtimeHours: res.overtimeHours,\r\n showLoader: false,\r\n })\r\n }).catch(() => {\r\n setLocalState({...localState, showLoader: false});\r\n alert(\"Error happened while retrieving data.\"); \r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n setOpen(true)}\r\n variant=\"contained\"\r\n color=\"primary\"\r\n fullWidth\r\n className={classes.button}\r\n endIcon={}\r\n size=\"large\">Request vacation\r\n\r\n \r\n \r\n \r\n {/* */}\r\n \r\n \r\n }\r\n />\r\n\r\n \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n props.history.push(\"/urlauboverview\")} style={{cursor: 'grab'}}>\r\n }\r\n />\r\n \r\n \r\n \r\n \r\n }\r\n />\r\n \r\n \r\n \r\n setOpen(false)}\r\n handleSubmit={requestVacation}\r\n />\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default withRouter(Urlaub);","import React, { Component } from 'react'\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Webcam from \"react-webcam\";\r\n//import { Text } from './LanguageContainer';\r\n\r\nexport default class TakePhoto extends Component {\r\n\r\n \r\n setRef = webcam => {\r\n this.webcam = webcam;\r\n }\r\n\r\n takeScreenshootHandle=()=> {\r\n const imageSrc = this.webcam.getScreenshot();\r\n this.props.handleTakeScreenshot(imageSrc);\r\n this.props.handleClose();\r\n }\r\n\r\n render() {\r\n const videoConstraints = { \r\n //facingMode: { exact: \"environment\" }\r\n facingMode: \"environment\"\r\n };\r\n\r\n return (\r\n \r\n \r\n Take photo\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n }\r\n}\r\n","import React from 'react'\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Card from '@material-ui/core/Card';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport clsx from 'clsx';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(0),\r\n //fontFamily: 'sans-serif',\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 70,\r\n //margin: theme.spacing(1),\r\n backgroundColor: '#8992d7',\r\n color: '#FFFFFF',\r\n textTransform: 'uppercase',\r\n textAlign: 'left',\r\n fontWeight: 'bold',\r\n padding: 5,\r\n // position: 'relative', \r\n },\r\n cardRootMini: {\r\n height: 50,\r\n backgroundColor: '#8992d7',\r\n color: '#FFFFFF',\r\n textTransform: 'uppercase',\r\n textAlign: 'left',\r\n fontWeight: 'bold',\r\n padding: 0,\r\n },\r\n paper: {\r\n padding: theme.spacing(1),\r\n textAlign: 'left',\r\n color: 'grey',\r\n // backgroundColor: '#8992d7'\r\n },\r\n bullet: {\r\n display: 'inline-block',\r\n margin: '0 2px',\r\n transform: 'scale(0.8)',\r\n },\r\n title: {\r\n fontSize: '0.8em',\r\n textAlign: 'left',\r\n fontWeight: 'bold'\r\n\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n fontSize: 10\r\n },\r\n green: {\r\n backgroundColor: '#79c350'\r\n },\r\n red: {\r\n backgroundColor: '#f06292'\r\n },\r\n blue: {\r\n backgroundColor: '#45bbdf'\r\n },\r\n white: {\r\n backgroundColor: '#FFFFFF',\r\n color: 'grey'\r\n },\r\n holiday: {\r\n backgroundColor: '#79c350',\r\n color: '#ffffff !important',\r\n '& *>p':{\r\n color: '#ffffff !important',\r\n }\r\n //color: 'grey'\r\n },\r\n\r\n palm: {\r\n height: 40\r\n },\r\n circleStyle: {\r\n backgroundColor: '#45bbdf',\r\n borderRadius: \"50%\",\r\n width: 50,\r\n height: 50,\r\n //right: 0,\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n margin: 0,\r\n opacity: 0.3,\r\n position: 'absolute',\r\n },\r\n circleStyleMini: {\r\n backgroundColor: '#45bbdf',\r\n borderRadius: \"50%\",\r\n width: 30,\r\n height: 30,\r\n //right: 0,\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n margin: 0,\r\n opacity: 0.3,\r\n position: 'absolute',\r\n },\r\n circle: {\r\n position: 'relative',\r\n width: 'inherit',\r\n height: 'inherit',\r\n textAlign: 'center'\r\n },\r\n button: {\r\n padding: theme.spacing(2),\r\n //margin: theme.spacing(1)\r\n },\r\n ravno: {\r\n textAlign: 'right'\r\n },\r\n iconContainer: {\r\n //paddingTop: 10,\r\n marginLeft: 'auto',\r\n marginRight: 'auto',\r\n width: 50,\r\n height: 50,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\"\r\n },\r\n number: {\r\n fontSize: '1.5em',\r\n textAlign: 'left',\r\n padding: theme.spacing(1),\r\n },\r\n numberMini: {\r\n fontSize: '1.5em',\r\n textAlign: 'left',\r\n padding: 5,\r\n }\r\n}));\r\n\r\n\r\nexport default function CardContainerDates(props) {\r\n const classes = useStyles(props);\r\n return (\r\n \r\n \r\n {props.useMini ? (\r\n <>\r\n \r\n \r\n {props.number}\r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n {props.subtitle}\r\n \r\n \r\n \r\n
\r\n {props.class !== \"holiday\" &&\r\n
\r\n
}\r\n\r\n
\r\n {props.mainIcon}\r\n
\r\n
\r\n
\r\n \r\n ) : (<>\r\n \r\n \r\n {props.number}\r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n {props.subtitle}\r\n \r\n \r\n \r\n
\r\n {props.class !== \"holiday\" &&\r\n
\r\n
}\r\n
\r\n {props.mainIcon}\r\n
\r\n
\r\n
\r\n \r\n )}\r\n\r\n
\r\n
\r\n )\r\n}\r\n","//import styles from '../../assets/styles/FensterDetails.module.css';\r\nimport React, { useEffect, useState } from 'react'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\n//import { Text } from '../extensions/LanguageContainer';\r\nimport TakePhoto from '../extensions/TakePhoto';\r\n//import { FotoAdd, SendEmail } from '../../actions/TaskActions';\r\nimport { useDispatch } from 'react-redux';\r\nimport { ButtonGroup, CircularProgress, IconButton, TextField } from '@material-ui/core';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableRow from '@material-ui/core/TableRow';\r\nimport GridList from '@material-ui/core/GridList';\r\nimport GridListTile from '@material-ui/core/GridListTile';\r\nimport GridListTileBar from '@material-ui/core/GridListTileBar';\r\nimport { PhotoCameraIcon, ImageIcon, Delete } from '../../bundles/IconsBundle';\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { getSession } from '../../helpers/HelperFunctions';\r\nimport List from '@material-ui/core/List';\r\n\r\nimport moment from 'moment';\r\nimport { withRouter } from 'react-router-dom';\r\nimport CardContainerDates from '../Reusable/CardContainerDates';\r\nimport { FaSortDown, FaSortUp, FaStethoscope, FaUpload } from 'react-icons/fa';\r\nimport clsx from 'clsx';\r\nimport { green } from '@material-ui/core/colors';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n //display: 'flex',\r\n //flexDirection: 'column',\r\n //alignItems: 'center',\r\n // '& > *': {\r\n // margin: theme.spacing(1),\r\n // },\r\n margin: theme.spacing(1),\r\n color: \"#ffffff\",\r\n // textAlign: '-webkit-center'\r\n },\r\n groupedBtn: {\r\n margin: theme.spacing(0),\r\n //maxWidth: '600px',\r\n\r\n },\r\n button: {\r\n backgroundColor: \"#1976d2\",\r\n '&:hover': {\r\n backgroundColor: \"#1976d2\",\r\n },\r\n color: \"#FFFFFF\",\r\n //fontSize: \"18px\",\r\n margin: theme.spacing(0)\r\n },\r\n wrapper: {\r\n margin: theme.spacing(0),\r\n position: 'relative',\r\n },\r\n buttonSuccess: {\r\n backgroundColor: \"#3cb498\",\r\n '&:hover': {\r\n backgroundColor: \"#0eb58e\",\r\n },\r\n color: \"#FFFFFF\",\r\n //fontSize: \"22px\",\r\n margin: theme.spacing(0)\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n sectionHeading: {\r\n borderBottom: '2px solid #1976d2',\r\n textTransform: 'uppercase',\r\n color: '#000000',\r\n marginTop: '10px'\r\n },\r\n show: {\r\n display: 'block',\r\n },\r\n hide: {\r\n display: 'none',\r\n }\r\n}));\r\n\r\nfunction Krankenmeldung(props) {\r\n //let pos = props.location.position || [];\r\n\r\n // const [valueFenster, setValueFenster] = React.useState('ja');\r\n // const [valueGlas, setValueGlas] = React.useState('ja');\r\n //let fotos = useSelector(appState => appState.task.fotos) || [];\r\n //let currentPdf = useSelector(appState => appState.task.currentPdf) || null;\r\n //let currentPositionId = useSelector(appState => appState.task.currentlySelectedPositionId) || null;\r\n const classes = useStyles();\r\n let cookie = getSession();\r\n let beraterId = parseInt(cookie.nameid);\r\n const [loading, setLoading] = React.useState(false);\r\n const [success, setSuccess] = React.useState(false);\r\n\r\n let [showUsed, showUsedDates] = useState([]);\r\n const buttonClassname = clsx({\r\n [classes.buttonSuccess]: success,\r\n [classes.button]: !success\r\n });\r\n\r\n const dispatch = useDispatch();\r\n\r\n const [state, setState] = React.useState({\r\n showForm: false,\r\n TakePhotoOpen: false,\r\n images: [],\r\n dialog: false,\r\n signDialogOpen: false,\r\n valueFenster: \"ja\",\r\n valueGlas: \"ja\",\r\n assemblyCompleted: \"ja\",\r\n constructionSiteClean: \"ja\",\r\n deliveryWithoutDamage: \"ja\",\r\n abhnameFreiText: \"\",\r\n sendMailDialogOpen: false,\r\n subject: \"\",\r\n email: \"\",\r\n message: \"\",\r\n emailValid: true\r\n\r\n });\r\n\r\n\r\n\r\n useEffect(() => {\r\n new DbTasks().getDataFromDb(\"api/Urlaub/GetUrlaubInfo\", { beraterId: beraterId }, { method: \"POST\" })\r\n .then(res => {\r\n console.log(res);\r\n //setUsedDays(res.krankDates.length);\r\n showUsedDates(res.krankDates);\r\n //setUsedDays(json.id);\r\n })\r\n // fetch('https://localhost:44393/api/Urlaub/GetUrlaubInfo', requestOptions)\r\n // .then(response => response.json())\r\n\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, []);\r\n\r\n\r\n let file_input = [];\r\n\r\n const radioHandleChange = (e) => {\r\n console.log(\"Radio state : \", state);\r\n setState({ ...state, [e.target.name]: e.target.value });\r\n }\r\n\r\n const handleTextChange = (e) => {\r\n setState({ ...state, [e.target.name]: e.target.value })\r\n }\r\n\r\n const fotoMachen = () => {\r\n setState({ ...state, TakePhotoOpen: true, images: state.images });\r\n };\r\n\r\n const closeTakePhoto = () => {\r\n setState({ ...state, TakePhotoOpen: false });\r\n };\r\n\r\n const selectFile = event => {\r\n event.preventDefault();\r\n console.log(\"FI\", file_input);\r\n file_input = document.createElement(\"input\");\r\n file_input.multiple = \"multiple\";\r\n file_input.id = 'file_input_id';\r\n //file_input.setAtribute(\"data-testid\", \"file_input_id\");\r\n file_input.addEventListener(\r\n \"change\",\r\n uploadFile.bind(this),\r\n false\r\n );\r\n file_input.type = \"file\";\r\n file_input.click();\r\n };\r\n\r\n const getBase64 = file => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n //reader.onload = () => resolve(reader.result);\r\n reader.onload = () => {\r\n const img = new Image();\r\n img.src = reader.result;\r\n img.onload = () => {\r\n let extension = img.src.startsWith('data:image/png') === true ? \".png\" : \".jpg\";\r\n var newDataUri = imageToDataUri(img, img.width, img.height, extension);\r\n resolve(newDataUri);\r\n };\r\n\r\n reader.onerror = error => reject(error);\r\n };\r\n reader.onerror = error => reject(error);\r\n });\r\n };\r\n\r\n const uploadFile = () => {\r\n Object.values(file_input.files).forEach(src => {\r\n let fileName = src.name;\r\n getBase64(src).then(src =>\r\n // dispatch(FotoAdd(null, src)\r\n {\r\n let img = state.images;\r\n img.push({ data: src, fileName: fileName });\r\n setState({ ...state, images: img })\r\n\r\n //setState({ ...state, images: [...state.images, { data: src, fileName: fileName }] })\r\n }\r\n //src \r\n );\r\n });\r\n };\r\n\r\n const handleTakeScreenshot = (imageSrc) => {\r\n const img = new Image();\r\n img.src = imageSrc;\r\n img.onload = () => {\r\n let extension = img.src.startsWith('data:image/png') === true ? \".png\" : \".jpg\";\r\n var newDataUri = imageToDataUri(img, img.width, img.height, extension);\r\n //dispatch(FotoAdd(null, newDataUri))\r\n };\r\n\r\n }\r\n\r\n const imageToDataUri = (img, width, height, extension) => {\r\n\r\n // create an off-screen canvas\r\n var canvas = document.createElement('canvas'),\r\n ctx = canvas.getContext('2d');\r\n\r\n // set its dimension to target size\r\n canvas.width = width;\r\n canvas.height = height;\r\n\r\n // draw source image into the off-screen canvas:\r\n ctx.drawImage(img, 0, 0, width, height);\r\n\r\n // encode image to data-uri with base64 version of compressed image\r\n if (extension === \".png\") {\r\n return canvas.toDataURL('image/png', 0.2);\r\n } else {\r\n return canvas.toDataURL('image/jpeg', 0.2);\r\n }\r\n\r\n }\r\n\r\n const removeImage = (idToRemove) => {\r\n //dispatch(FotoRemove(idToRemove));\r\n //console.log(\"Image to remove : \", idToRemove);\r\n let imagesWithoutDeletedOnes = state.images.filter(e => e.fileName !== idToRemove);\r\n //console.log(\"Deleted image name : \", idToRemove);\r\n\r\n //console.log(\"Images left : \", imagesWithoutDeletedOnes);\r\n setState({ ...state, images: imagesWithoutDeletedOnes });\r\n }\r\n\r\n //console.log(\"Image :\", imageBase64);\r\n\r\n const handleCloseMailDialog = () => {\r\n setState({ ...state, sendMailDialogOpen: false });\r\n }\r\n\r\n const openEmailDialog = () => {\r\n setState({ ...state, sendMailDialogOpen: true })\r\n }\r\n\r\n const uploadData = () => {\r\n //console.log(\"imagess :\", state.images);\r\n setSuccess(false);\r\n setLoading(true);\r\n let subject = document.getElementById(\"subject\").value;\r\n if (subject === \"\") {\r\n setSuccess(false);\r\n setLoading(false);\r\n alert(\"Please enter Subject value\");\r\n return;\r\n }\r\n let data = {\r\n Attachments: state.images,\r\n BeraterId: beraterId,\r\n Subject: subject,\r\n endpoint: \"api/Urlaub/krankUpload\",\r\n }\r\n new DbTasks().dataUpload(data)\r\n .then(res => {\r\n if (res) {\r\n setSuccess(true);\r\n setLoading(false);\r\n }\r\n else {\r\n setSuccess(false);\r\n setLoading(false);\r\n alert(\"Krank upload went wrong.\");\r\n }\r\n }).catch(() => {\r\n setSuccess(false);\r\n setLoading(false);\r\n alert(\"Krank upload went wrong.\");\r\n })\r\n }\r\n\r\n\r\n return (\r\n
\r\n setState({ ...state, showForm: !state.showForm })}\r\n startIcon={}\r\n endIcon={state.showForm ? : }\r\n\r\n >\r\n {\"Krankmeldung beantragen\"}\r\n \r\n {/* \r\n */}\r\n \r\n\r\n \r\n \r\n

Krankenstandsdaten

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n }\r\n\r\n >\r\n {\"Open camera\"}\r\n \r\n }\r\n\r\n >\r\n {\"Add photos\"}\r\n \r\n \r\n
\r\n
\r\n \r\n\r\n \r\n\r\n {/* Fotos */}\r\n \r\n \r\n \r\n \r\n \r\n {state.images.map((tile, index) => (\r\n \r\n \"\"\r\n removeImage(tile.fileName)}\r\n actionIcon={\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n {/*
*/}\r\n }\r\n variant=\"contained\" fullWidth >\r\n Upload data\r\n \r\n {loading && }\r\n
\r\n \r\n\r\n {/* */}\r\n\r\n {/* */}\r\n \r\n \r\n \r\n\r\n \r\n {showUsed && showUsed.length > 0 && \r\n
Krankenstand
\r\n
}\r\n\r\n {showUsed.map((el, index) => (\r\n \r\n }\r\n />\r\n \r\n ))}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(Krankenmeldung);","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport moment from 'moment';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\nimport CardContainer from '../Reusable/CardContainer';\r\nimport { FaEuroSign } from 'react-icons/fa';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n //fontFamily: 'sans-serif',\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 245,\r\n margin: theme.spacing(2)\r\n },\r\n paper: {\r\n padding: theme.spacing(0),\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n //backgroundColor: '#ffffa7'\r\n },\r\n bullet: {\r\n display: 'inline-block',\r\n margin: '0 2px',\r\n transform: 'scale(0.8)',\r\n },\r\n title: {\r\n fontSize: 20,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n green: {\r\n color: 'green'\r\n },\r\n red: {\r\n color: 'red'\r\n }\r\n}));\r\n\r\nfunction Monatsleistung(props) {\r\n const classes = useStyles();\r\n const [premieState, setPremieData] = useState({\r\n tagesData: [],\r\n minPremia: 0,\r\n maxPremia: 0\r\n });\r\n //const [tagesData, setTagesData] = useState([]);\r\n const [showLoading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n let beraterId = getBeraterId();\r\n let pastYear = new Date();\r\n pastYear.setFullYear(pastYear.getFullYear() - 1);\r\n new DbTasks().getDataFromDb(\"api/Leistungspremie/GetMonatPremie\", { startDate: pastYear, endDate: new Date(), beraterId: beraterId }, { method: \"POST\" })\r\n .then(res => {\r\n //console.log(\"Monatsleistung, :\", res);\r\n setPremieData({...premieState, tagesData: res.data, minPremia: res.minPremia, maxPremia: res.maxPremia })\r\n //setTagesData(res.data);\r\n setLoading(false);\r\n })\r\n .catch(err => {\r\n setLoading(false);\r\n alert(\"Service not available\");\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n\r\n const openTagesLeistung = (month, year) => {\r\n props.history.push(\"/tagesleistung/\" + month + \"/\" + year);\r\n }\r\n\r\n const getHighestPremie = (data) => {\r\n //let premia = data.sort((a, b) => a.premia < b.premia ? 1 : -1)[0].premia;\r\n let premia = data.reduce((a, b) => a + b.premia, 0);\r\n return premia;\r\n }\r\n\r\n return (\r\n
\r\n {/* Monatsleistung */}\r\n \r\n {premieState.tagesData && premieState.tagesData.map((el, index) => {\r\n // return
  • {el.weekNr}
  • \r\n return \r\n openTagesLeistung(el.month, el.year)}>\r\n }\r\n />\r\n {/* {cardDetails({ title: `${moment(el.month, 'M').format('MMMM') } / ${el.year}`, number: el.lista })} */}\r\n \r\n {/* {el.weekNr} */}\r\n \r\n })}\r\n {premieState.tagesData.length === 0 &&

    Es gibt keine Daten für die letzten 12 Monate.

    }\r\n {/* \r\n\r\n */}\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(Monatsleistung);","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport moment from 'moment';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport CardContainer from '../Reusable/CardContainer';\r\nimport { FaEuroSign } from 'react-icons/fa';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n //fontFamily: 'sans-serif',\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 245,\r\n margin: theme.spacing(2)\r\n },\r\n paper: {\r\n padding: theme.spacing(0),\r\n textAlign: 'center',\r\n color: theme.palette.text.secondary,\r\n //backgroundColor: '#ffffa7'\r\n },\r\n bullet: {\r\n display: 'inline-block',\r\n margin: '0 2px',\r\n transform: 'scale(0.8)',\r\n },\r\n title: {\r\n fontSize: 20,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n green: {\r\n color: 'green'\r\n },\r\n red: {\r\n color: 'red'\r\n }\r\n}));\r\n\r\n\r\nfunction Tagesleistung(props) {\r\n const classes = useStyles();\r\n const [premieState, setPremieData] = useState({\r\n tagesData: [],\r\n minPremia: 0,\r\n maxPremia: 0\r\n });\r\n const [showLoading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n let month = parseInt(props.match.params.id);\r\n let year = parseInt(props.match.params.year);\r\n let beraterId = getBeraterId();\r\n new DbTasks().getDataFromDb(\"api/Leistungspremie/GetWochePremie\", { month: month, year: year, beraterId: beraterId }, { method: \"POST\" })\r\n .then(res => {\r\n //console.log(\"Tagesleistung, :\", res);\r\n setPremieData({...premieState, tagesData: res.data, minPremia: res.minPremia, maxPremia: res.maxPremia });\r\n setLoading(false);\r\n }).catch(err => {\r\n setLoading(false);\r\n alert(\"Service not available\");\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n\r\n const cardDetails = (data) => {\r\n return (\r\n \r\n \r\n \r\n {data.title}\r\n \r\n \r\n {data.number}\r\n \r\n \r\n premia\r\n \r\n {/* \r\n well meaning and kindly.\r\n
    \r\n {'\"a benevolent smile\"'}\r\n
    */}\r\n
    \r\n {/* \r\n \r\n */}\r\n
    \r\n )\r\n }\r\n\r\n\r\n return (\r\n
    \r\n \r\n {premieState.tagesData && premieState.tagesData.map((el, index) => {\r\n // return
  • {el.weekNr}
  • \r\n return \r\n \r\n }\r\n />\r\n\r\n \r\n {/* {el.weekNr} */}\r\n \r\n })}\r\n {premieState.tagesData.length === 0 &&

    Es sind keine Daten für den Vormonat vorhanden

    }\r\n \r\n\r\n \r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(Tagesleistung);\r\n","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { GridListTile, GridListTileBar, IconButton, makeStyles } from '@material-ui/core';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\nimport { FaFolderOpen, FaImage } from 'react-icons/fa';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n justifyContent: 'space-around',\r\n overflow: 'hidden',\r\n backgroundColor: theme.palette.background.paper,\r\n margin: theme.spacing(2),\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 245,\r\n listStyleType: 'none'\r\n },\r\n gridList: {\r\n width: 'auto',\r\n height: 'auto',\r\n textAlign: 'left',\r\n margin: theme.spacing(2)\r\n },\r\n icon: {\r\n color: 'rgba(255, 255, 255, 0.54)',\r\n },\r\n cardText: {\r\n textAlign: 'left'\r\n },\r\n cardIcon:{\r\n width: \"100%\", \r\n height: \"100%\", \r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n justifyContent: \"center\",\r\n alignItems: \"center\"\r\n }\r\n}));\r\n\r\nfunction Gallery(props) {\r\n const classes = useStyles();\r\n const [folders, setFolders] = useState([]);\r\n const [showLoading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n //let week = parseInt(props.match.params.id); \r\n new DbTasks().getDataFromDb(\"api/Gallery/GetGalleryFolders\", {}, { method: \"GET\" })\r\n .then(res => {\r\n setFolders(res);\r\n setLoading(false);\r\n })\r\n\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n\r\n return (\r\n
    \r\n {/* Gallery */}\r\n \r\n {folders && folders.map((el) => (\r\n \r\n \r\n {el.base64 !== null ? {\"Gallery\"} :\r\n
    }\r\n\r\n {el.description}}\r\n key={el.id}\r\n actionIcon={\r\n
    \r\n props.history.push(\"/gallery/\" + el.id)} className={classes.icon}>\r\n \r\n \r\n
    \r\n }\r\n />\r\n
    \r\n
    \r\n ))}\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(Gallery);","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { green } from '@material-ui/core/colors';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useSelector } from 'react-redux';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n //display: 'flex',\r\n alignItems: 'center',\r\n },\r\n wrapper: {\r\n //margin: theme.spacing(1),\r\n position: 'relative',\r\n },\r\n buttonSuccess: {\r\n backgroundColor: green[500],\r\n '&:hover': {\r\n backgroundColor: green[700],\r\n },\r\n },\r\n fabProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: -6,\r\n left: -6,\r\n zIndex: 1,\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n}));\r\n\r\nexport default function Spinner(props) {\r\n const classes = useStyles();\r\n\r\n let loading = useSelector(state => state.app.buttonLoadingEnabled);\r\n\r\n\r\n const handleButtonClick = () => {\r\n props.handleSubmit();\r\n };\r\n\r\n return (\r\n
    \r\n
    \r\n \r\n {props.buttonText}\r\n \r\n {loading && }\r\n
    \r\n
    \r\n );\r\n}\r\n","import { NotificationManager } from 'react-notifications';\r\nimport 'react-notifications/lib/notifications.css';\r\n\r\n\r\nconst Notifications = (type, message) => {\r\n switch (type) {\r\n case 'info':\r\n NotificationManager.info(\"info\", message);\r\n break;\r\n case 'success':\r\n NotificationManager.success(\"success\", message);\r\n break;\r\n case 'warning':\r\n NotificationManager.warning(\"warning\", message);\r\n break;\r\n case 'error':\r\n NotificationManager.error('Error message', 'Click me!', 5000, () => {\r\n alert('callback');\r\n });\r\n break;\r\n default:\r\n NotificationManager.info('Info message', message);\r\n break;\r\n\r\n } \r\n}\r\nexport default Notifications;\r\n\r\n","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport Grid from '@material-ui/core/Grid';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Spinner from '../Reusable/Spinner';\r\nimport { useDispatch } from 'react-redux';\r\nimport { toggleSpinner } from '../../actions/AppActions';\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { getBase64, getBeraterId } from '../../helpers/HelperFunctions';\r\nimport Table from '@material-ui/core/Table';\r\nimport TableBody from '@material-ui/core/TableBody';\r\nimport TableCell from '@material-ui/core/TableCell';\r\nimport TableContainer from '@material-ui/core/TableContainer';\r\nimport TableHead from '@material-ui/core/TableHead';\r\nimport TableRow from '@material-ui/core/TableRow';\r\n// import Paper from '@material-ui/core/Paper';\r\nimport moment from 'moment';\r\nimport { Button, ButtonGroup, GridList, GridListTile, GridListTileBar, IconButton, Paper } from '@material-ui/core';\r\nimport PhotoCameraIcon from '@material-ui/icons/PhotoCamera';\r\nimport ImageIcon from '@material-ui/icons/Image';\r\nimport { Delete } from '@material-ui/icons';\r\nimport Notifications from '../Reusable/Notifications';\r\nimport { FaSort, FaSortDown, FaSortUp } from 'react-icons/fa';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n '& .MuiTextField-root': {\r\n margin: theme.spacing(1),\r\n },\r\n },\r\n test: {\r\n //margin: theme.spacing(1)\r\n marginTop: theme.spacing(1)\r\n },\r\n table: {\r\n width: '100%',\r\n '& th': {\r\n textTransform: 'uppercase',\r\n fontWeight: 'bold',\r\n }\r\n },\r\n tblContainer: {\r\n boxShadow: '5px 14px 17px 5px #d6d6d6',\r\n // borderTop: '1px solid grey',\r\n },\r\n green: {\r\n backgroundColor: '#a2cf6e'\r\n },\r\n show: {\r\n display: 'block',\r\n // height: '100%',\r\n // WebkitTransition: 'all 1s ease-in-out',\r\n\r\n },\r\n hide: {\r\n display: 'none',\r\n // zIndex: -999,\r\n // height: '0%',\r\n // WebkitTransition: 'all 1s ease-in-out',\r\n },\r\n sectionHeading: {\r\n borderBottom: '2px solid #1976d2',\r\n textTransform: 'uppercase',\r\n color: '#000000',\r\n marginTop: '10px'\r\n },\r\n}));\r\n\r\nfunction Kvp() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const [subject, setSubject] = useState(\"\");\r\n const [desc, setDesc] = useState(\"\");\r\n // const [showForm, setShowForm] = useState(false);\r\n const [kvpState, setKvpState] = useState({\r\n suggestionList: [],\r\n loader: true,\r\n images: [],\r\n showForm: false,\r\n reloadTable: false,\r\n });\r\n\r\n let file_input = [];\r\n\r\n useEffect(() => {\r\n let beraterId = getBeraterId();\r\n new DbTasks().getDataFromDb(\"api/Kvp/SuggestionList\", { beraterId: beraterId }, { method: \"POST\" })\r\n .then(res => {\r\n //console.log(\"Monatsleistung, :\", res);\r\n setKvpState({ ...kvpState, suggestionList: res, loader: false })\r\n })\r\n .catch(err => {\r\n setKvpState({ ...kvpState, loader: false });\r\n alert(\"Service not available\");\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [kvpState.reloadTable])\r\n\r\n const uploadData = () => {\r\n if(subject === \"\" || desc === \"\") {\r\n Notifications(\"warning\", \"Subject and Description are required.\");\r\n return;\r\n }\r\n setKvpState({ ...kvpState, loader: true })\r\n let beraterId = getBeraterId();\r\n let data = {\r\n Name: subject,\r\n description: desc,\r\n Attachments: kvpState.images,\r\n CreatedBy: beraterId,\r\n endpoint: \"api/Kvp/KvpUpload\",\r\n method: \"POST\"\r\n };\r\n dispatch(toggleSpinner(true));\r\n new DbTasks().dataUpload(data)\r\n .then(res => {\r\n //console.log(\"Suggestion response :\", res);\r\n if (res) {\r\n dispatch(toggleSpinner(false));\r\n setKvpState({...kvpState, showForm: false, images: [], reloadTable: !kvpState.reloadTable});\r\n Notifications(\"success\", \"Suggestion sent.\");\r\n }\r\n else {\r\n dispatch(toggleSpinner(false));\r\n alert(\"Suggestion upload went wrong.\");\r\n }\r\n setSubject(\"\");\r\n setDesc(\"\");\r\n }).catch(() => {\r\n dispatch(toggleSpinner(false));\r\n alert(\"Suggestion upload went wrong.\");\r\n });\r\n }\r\n\r\n const test = (show) => {\r\n console.log(show);\r\n setKvpState({...kvpState, showForm: show});;\r\n }\r\n\r\n\r\n const selectFile = event => {\r\n event.preventDefault();\r\n console.log(\"FI\", file_input);\r\n file_input = document.createElement(\"input\");\r\n file_input.multiple = \"multiple\";\r\n file_input.id = 'file_input_id';\r\n //file_input.setAtribute(\"data-testid\", \"file_input_id\");\r\n file_input.addEventListener(\r\n \"change\",\r\n uploadFile.bind(this),\r\n false\r\n );\r\n file_input.type = \"file\";\r\n file_input.click();\r\n };\r\n\r\n const uploadFile = () => {\r\n //let images = [];\r\n Object.values(file_input.files).forEach(src => {\r\n let fileName = src.name;\r\n getBase64(src).then(src => {\r\n //dispatch(FotoAdd(null, src))\r\n let img = kvpState.images;\r\n img.push({ data: src, fileName: fileName });\r\n setKvpState({ ...kvpState, images: img })\r\n //console.log(\"Uploaded image : \", src)\r\n }\r\n );\r\n });\r\n //setKvpState({...kvpState, images})\r\n };\r\n\r\n const fotoMachen = () => {\r\n setKvpState({ ...kvpState, TakePhotoOpen: true, images: kvpState.images });\r\n };\r\n\r\n const removeImage = (idToRemove) => {\r\n console.log(\"Image to remove : \", idToRemove);\r\n let imagesWithoutDeletedOnes = kvpState.images.filter(e => e.fileName !== idToRemove);\r\n console.log(\"Deleted image name : \", idToRemove);\r\n\r\n console.log(\"Images left : \", imagesWithoutDeletedOnes);\r\n setKvpState({ ...kvpState, images: imagesWithoutDeletedOnes });\r\n // dispatch(FotoRemove(idToRemove));\r\n }\r\n\r\n\r\n return (\r\n
    \r\n \r\n \r\n \r\n

    KVP-Daten

    \r\n
    \r\n
    \r\n \r\n \r\n {/*
    */}\r\n setSubject(e.currentTarget.value)}\r\n value={subject}\r\n //defaultValue=\"\"\r\n variant=\"outlined\"\r\n className={classes.test}\r\n />\r\n \r\n \r\n setDesc(e.currentTarget.value)}\r\n value={desc}\r\n multiline\r\n rows={4}\r\n fullWidth\r\n variant=\"outlined\"\r\n className={classes.test}\r\n />\r\n \r\n \r\n \r\n
    \r\n \r\n }\r\n\r\n >\r\n {/* */}\r\n Open camera\r\n \r\n {/* {\" \"}\r\n   */}\r\n }\r\n\r\n >\r\n {/* */}\r\n Add photos\r\n \r\n {/* {state.signDialogOpen && ()} */}\r\n \r\n
    \r\n \r\n {/* {kvpState.loader && } */}\r\n {/* */}\r\n
    \r\n \r\n \r\n {kvpState.images.map((tile, index) => (\r\n \r\n \"\"\r\n removeImage(tile.fileName)}\r\n actionIcon={\r\n \r\n \r\n \r\n }\r\n />\r\n \r\n ))}\r\n \r\n \r\n \r\n uploadData()}\r\n fullWidth={true}\r\n customStyle={classes.test}\r\n buttonText=\"Send suggestion\" />\r\n \r\n\r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n test(!kvpState.showForm)}\r\n size=\"small\" variant=\"outlined\" color=\"primary\"\r\n endIcon={kvpState.showForm ? : }\r\n >New suggestion ?\r\n \r\n Suggestion list\r\n\r\n \r\n \r\n Subject\r\n Description\r\n Feedback\r\n Date\r\n \r\n \r\n \r\n {kvpState.suggestionList.map((row, index) => (\r\n \r\n {row.name}\r\n {/* \r\n {row.name}\r\n */}\r\n {row.description}\r\n {row.feedback}\r\n {row.created ? moment(row.created).format(\"DD.MM.YYYY\") : \"\"}\r\n \r\n ))}\r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(Kvp);","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport CardContainerSmall from '../Reusable/CardContainerSmall';\r\nimport { FaReadme } from 'react-icons/fa';\r\nimport { makeStyles } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n },\r\n cardColor: {\r\n backgroundColor: '#45bbdf'\r\n }\r\n}));\r\n\r\nfunction Wegweisser(props) {\r\n const classes = useStyles();\r\n const [groups, setGroups] = useState([]);\r\n\r\n useEffect(() => {\r\n let id = parseInt(props.match.params.id);\r\n new DbTasks().getDataFromDb(`api/Wegweisser/WegGroups?parentId=${id}`, {}, { method: \"GET\" })\r\n .then(res => {\r\n setGroups(res);\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [props.match.params.id]);\r\n\r\n return (\r\n
    \r\n \r\n {groups.length > 0 && groups.map(el =>\r\n props.history.push(`/wegweisser/${el.id}`)}>\r\n 1 ? \"Subgroups\" : \"Subgroup\"}\r\n class={\"blue\"}\r\n mainIcon={}\r\n />\r\n \r\n )}\r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(Wegweisser);","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport GridListTile from '@material-ui/core/GridListTile';\r\nimport GridListTileBar from '@material-ui/core/GridListTileBar';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport Slide from '@material-ui/core/Slide';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\nimport { FaDownload, FaExpandArrowsAlt, FaImage } from 'react-icons/fa';\r\nimport { Grid } from '@material-ui/core';\r\nimport moment from 'moment';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n // display: 'flex',\r\n // flexWrap: 'wrap',\r\n // justifyContent: 'space-around',\r\n // overflow: 'hidden',\r\n // backgroundColor: theme.palette.background.paper,\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 245,\r\n listStyleType: 'none'\r\n },\r\n gridList: {\r\n width: 'auto',\r\n height: 'auto',\r\n },\r\n icon: {\r\n color: 'rgba(255, 255, 255, 0.54)',\r\n },\r\n cardText: {\r\n textAlign: 'left',\r\n }\r\n}));\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nfunction GalleryPreview(props) {\r\n const classes = useStyles();\r\n const [imageList, setImageList] = useState([]);\r\n const [dialogOpen, setDialogOpen] = useState(false);\r\n const [showLoading, setLoading] = useState(true);\r\n\r\n useEffect(() => {\r\n let id = parseInt(props.match.params.id);\r\n new DbTasks().getDataFromDb(`api/Gallery/GetImageList?FolderId=${id}`, {}, { method: \"GET\" })\r\n .then(res => {\r\n setImageList(res);\r\n setLoading(false);\r\n })\r\n\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, []);\r\n\r\n const download = (id, fullPreview = false) => {\r\n setLoading(true);\r\n fetch(`${process.env.REACT_APP_LOCAL_API_URL}api/Gallery/Download?id=${id}`, { method: \"GET\" })\r\n .then(response => response.blob())\r\n .then(blob => {\r\n if (fullPreview) {\r\n //Pretvoriti blob u base64 i otvoriti sliku u dialog-u\r\n var reader = new FileReader();\r\n reader.readAsDataURL(blob);\r\n reader.onloadend = function () {\r\n var base64data = reader.result;\r\n setDialogOpen(true);\r\n document.getElementById(\"fullSizeImage\").innerHTML = `\"full`;\r\n }\r\n } else {\r\n //pripremiti blob file za download\r\n var url = window.URL.createObjectURL(blob);\r\n var a = document.createElement('a');\r\n a.href = url;\r\n a.download = \"bild.jpg\";\r\n document.body.appendChild(a); // we need to append the element to the dom -> otherwise it will not work in firefox\r\n a.click();\r\n a.remove(); //afterwards we remove the element again \r\n }\r\n setLoading(false);\r\n } \r\n );\r\n }\r\n\r\n return (\r\n
    \r\n {/* Gallery preview */}\r\n
    \r\n \r\n {/* */}\r\n {imageList.map((tile) => (\r\n \r\n \r\n {/* {tile.imageName} */}\r\n {tile.base64 !== null ? {\"Gallery\"} :\r\n
    }\r\n Created: {moment(tile.datum).format(\"DD.MM.YYYY\")} : ''}\r\n key={tile.id}\r\n actionIcon={\r\n
    \r\n download(tile.id, true)} aria-label={`info about tile.title`} className={classes.icon}>\r\n \r\n \r\n download(tile.id)} aria-label={`info about tile.title`} className={classes.icon}>\r\n \r\n \r\n
    \r\n }\r\n />\r\n
    \r\n
    \r\n ))}\r\n {/*
    */}\r\n
    \r\n
    \r\n \r\n {props.title}\r\n \r\n {/* \r\n FullSize preview\r\n */}\r\n
    \r\n\r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(GalleryPreview);","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { FaQuestion } from 'react-icons/fa';\r\nimport CardContainerSmall from '../Reusable/CardContainerSmall';\r\nimport { makeStyles } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n },\r\n cardColor: {\r\n backgroundColor: '#45bbdf'\r\n }\r\n}));\r\n\r\nfunction WegweisserSubGroups(props) {\r\n const classes = useStyles();\r\n const [groups, setGroups] = useState([]);\r\n\r\n useEffect(() => {\r\n let id = parseInt(props.match.params.id);\r\n new DbTasks().getDataFromDb(`api/Wegweisser/WegSubGroups?groupId=${id}`, {}, { method: \"GET\" })\r\n .then(res => {\r\n setGroups(res);\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [props.match.params.id]);\r\n\r\n return (\r\n
    \r\n \r\n {groups.length > 0 && groups.map(el =>\r\n props.history.push(`/wegweisseranswer/${el.id}`)}>\r\n 1 ? \"Questions\" : \"Question\"}\r\n class={\"blue\"}\r\n mainIcon={}\r\n />\r\n \r\n )}\r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(WegweisserSubGroups);","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { Card } from '@material-ui/core';\r\nimport { FaInfoCircle } from 'react-icons/fa';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n //width: '100%',\r\n },\r\n cardRoot: {\r\n minWidth: 245,\r\n height: 'auto',\r\n //margin: theme.spacing(1),\r\n backgroundColor: '#FFFFFF',\r\n color: '#FFFFFF',\r\n textTransform: 'uppercase',\r\n textAlign: 'left',\r\n fontWeight: 'bold',\r\n margin: theme.spacing(1), \r\n\r\n },\r\n item:{\r\n //backgroundColor: '#45bbdf',\r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n fontWeight: 'bold',\r\n },\r\n accStil:{\r\n //backgroundColor: '#45bbdf',\r\n color: 'grey',\r\n // border: '1px solid grey'\r\n },\r\n answer:{\r\n textAlign: 'justify',\r\n fontFamily: 'Fira Sans, Sans-serif',\r\n fontSize: '1.2em',\r\n textTransform: 'initial'\r\n //border: '1px solid grey'\r\n }\r\n}));\r\n\r\nfunction WegweisserAnswers(props) {\r\n const classes = useStyles();\r\n const [groups, setGroups] = useState([]);\r\n\r\n useEffect(() => {\r\n let id = parseInt(props.match.params.id);\r\n new DbTasks().getDataFromDb(`api/Wegweisser/WegAnswers?subGroupId=${id}`, {}, { method: \"GET\" })\r\n .then(res => {\r\n setGroups(res);\r\n });\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [props.match.params.id]);\r\n\r\n return (\r\n
    \r\n\r\n \r\n \r\n {groups.length > 0 && groups.map(el =>\r\n // <>\r\n \r\n \r\n }\r\n aria-controls=\"panel1a-content\"\r\n id=\"panel1a-header\"\r\n >\r\n {el.question}\r\n
    \r\n \r\n
    \r\n \r\n \r\n \r\n {el.answer}\r\n \r\n \r\n
    \r\n
    \r\n // \r\n )}\r\n
    \r\n
    \r\n
    \r\n\r\n )\r\n}\r\n\r\nexport default withRouter(WegweisserAnswers);","import React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\nimport moment from 'moment';\r\nimport { Grid, makeStyles } from '@material-ui/core';\r\nimport CardContainerDates from '../Reusable/CardContainerDates';\r\nimport { FaClock } from 'react-icons/fa';\r\nimport { FaHome } from 'react-icons/fa'\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n }\r\n}));\r\n\r\n\r\nfunction Arbeitszeiten() {\r\n const classes = useStyles();\r\n const [localState, setLocalState] = useState({\r\n workingTimes: [],\r\n showLoader: true,\r\n })\r\n //const [workingTimes, setWorkingTimes] = useState([]);\r\n\r\n useEffect(() => {\r\n let beraterId = getBeraterId();\r\n new DbTasks().getDataFromDb(`api/FirmaInfo/ArbeitszeitInfo?id=${beraterId}`, { }, { method: \"GET\" })\r\n .then(res => {\r\n //setWorkingTimes(res);\r\n setLocalState({...localState, workingTimes: res, showLoader: false})\r\n //console.log(\"Working times :\", res);\r\n }).catch(() => {\r\n\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n return (\r\n
    \r\n \r\n {localState.workingTimes.length > 0 && localState.workingTimes.map((el, index) => {\r\n return (\r\n //
  • {moment(el.date).format(\"DD.MM.YYYY\")} {el.von} {el.bis}
  • \r\n \r\n : }\r\n />\r\n \r\n )\r\n })}\r\n {localState.workingTimes.length === 0 && \r\n \r\n

    Arbeitszeiten sind in Suite nicht konfiguriert.

    \r\n
    }\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(Arbeitszeiten);","import { makeStyles } from '@material-ui/core';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n },\r\n veran:{\r\n margin: '5px',\r\n borderTop: '1px solid #1976d2', \r\n textAlign: 'center',\r\n display: 'block' \r\n },\r\n veranNoContent:{\r\n display:'none'\r\n }\r\n}));\r\n\r\nfunction Veranstaltungen() {\r\n const classes = useStyles();\r\n const [showLoading, setLoading] = useState(true);\r\n const [showContent, setShowContent] = useState(false);\r\n\r\n useEffect(() => {\r\n let beraterId = getBeraterId();\r\n new DbTasks().getDataFromDb(`api/FirmaInfo/Veranstaltungen`, { BeraterId: beraterId, Type: 0 }, { method: \"POST\" })\r\n .then(res => {\r\n console.log(res);\r\n if(!res){\r\n setLoading(false);\r\n return;\r\n }else{\r\n setLoading(false); \r\n if(res.length > 0) setShowContent(true);\r\n res.map((item, index) => {\r\n document.getElementById(\"veran\" + index).innerHTML = \"\";\r\n document.getElementById(\"veran\" + index).innerHTML = item.body;\r\n document.getElementById(\"veran\" + index).hidden = false;\r\n });\r\n //document.getElementById(\"body\").innerHTML = res.length > 0 ? res[0].body : \"No data for Veranstaltungen.\";\r\n }\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n return (\r\n
    \r\n Veranstaltungen\r\n
    \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(Veranstaltungen);","import { makeStyles } from '@material-ui/core';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n },\r\n allgemein:{\r\n // backgroundColor: 'red', \r\n margin: '5px',\r\n borderTop: '1px solid #1976d2', \r\n textAlign: 'center',\r\n display:'block'\r\n //display: 'none' \r\n },\r\n allgemeinNoContent: {\r\n display: 'none'\r\n }\r\n}));\r\n\r\nfunction Allgemein() {\r\n const classes = useStyles();\r\n const [showLoading, setLoading] = useState(true);\r\n const [showContent, setShowContent] = useState(false);\r\n\r\n useEffect(() => {\r\n let beraterId = getBeraterId();\r\n new DbTasks().getDataFromDb(`api/FirmaInfo/Veranstaltungen`, { BeraterId: beraterId, Type: 1 }, { method: \"POST\" })\r\n .then(res => {\r\n console.log(res);\r\n if (!res) {\r\n setLoading(false);\r\n return;\r\n } else {\r\n setLoading(false);\r\n if(res.length > 0) setShowContent(true);\r\n res.map((item, index) => {\r\n document.getElementById(\"allgemein\" + index).innerHTML = \"\";\r\n document.getElementById(\"allgemein\" + index).innerHTML = item.body;\r\n document.getElementById(\"allgemein\" + index).hidden = false;\r\n });\r\n }\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n return (\r\n
    \r\n Allgemein\r\n
    \r\n\r\n
    \r\n
    \r\n\r\n
    \r\n \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(Allgemein);","import { Grid, makeStyles } from '@material-ui/core';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { FaUmbrellaBeach } from 'react-icons/fa';\r\nimport { withRouter } from 'react-router-dom';\r\nimport CardContainerDates from '../Reusable/CardContainerDates';\r\nimport moment from 'moment';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\nimport DbTasks from '../../db/DbTasks';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n },\r\n sectionHeading: {\r\n borderBottom: '2px solid #1976d2',\r\n textTransform: 'uppercase',\r\n\r\n }\r\n}));\r\n\r\nfunction UrlaubOverview() {\r\n const classes = useStyles();\r\n const [state, setUrlaubData] = useState({\r\n usedDates: [],\r\n plannedDates: [],\r\n urlaubRequest: []\r\n })\r\n // let [showUsed, showUsedDates] = useState([]) //useState([\"2021-01-11T00:00:00\", \"2021-01-12T00:00:00\", \"2021-01-13T00:00:00\",\"2021-01-14T00:00:00\" ,\"2021-01-15T00:00:00\", \"2021-01-16T00:00:00\"]);\r\n\r\n useEffect(() => {\r\n let beraterId = getBeraterId();\r\n new DbTasks().getDataFromDb(\"api/Urlaub/GetUrlaubInfo\", { beraterId: beraterId }, { method: \"POST\" })\r\n .then(res => {\r\n setUrlaubData({...state, usedDates: res.usedDates, plannedDates: res.plannedDates, urlaubRequest: res.urlaubRequest})\r\n })\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n\r\n return (\r\n
    \r\n \r\n {state.usedDates.length > 0 &&\r\n \r\n

    Used days

    \r\n
    \r\n }\r\n\r\n {state.usedDates.map((el, index) => (\r\n\r\n \r\n }\r\n />\r\n \r\n ))}\r\n\r\n {state.plannedDates.length > 0 &&\r\n \r\n

    Planned days

    \r\n
    \r\n }\r\n {state.plannedDates.map((el, index) => (\r\n\r\n \r\n }\r\n />\r\n \r\n ))}\r\n {state.urlaubRequest.length > 0 &&\r\n \r\n

    Requested urlaub dates (waiting for approval)

    \r\n
    \r\n }\r\n {state.urlaubRequest.map((el, index) => (\r\n\r\n \r\n }\r\n />\r\n \r\n ))}\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default withRouter(UrlaubOverview);","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://cra.link/PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\r\n );\r\n \r\n export function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n \r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n \r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n \r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://cra.link/PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n }\r\n \r\n function registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://cra.link/PWA.'\r\n );\r\n \r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n \r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch((error) => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n }\r\n \r\n function checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log('No internet connection found. App is running in offline mode.');\r\n });\r\n }\r\n \r\n export function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then((registration) => {\r\n registration.unregister();\r\n })\r\n .catch((error) => {\r\n console.error(error.message);\r\n });\r\n }\r\n }","import React, { useEffect } from \"react\";\r\nimport { useDispatch, } from \"react-redux\";\r\n// import { setTitle, toggleDrawer } from \"../actions/AppActions\";\r\nimport Home from './Home';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport SwipeableTemporaryDrawer from '../components/Reusable/SwipeableDrawer';\r\nimport { addNewNotification } from '../actions/NotificationActions';\r\nimport Notifications from '../components/Notifications/NotificationList';\r\nimport Urlaub from \"./Urlaub/Urlaub\";\r\nimport Krankenmeldung from \"./Krankenmeldung/Krankenmeldung\";\r\nimport Monatsleistung from \"./Leistungspremie/Monatsleistung\";\r\nimport Tagesleistung from \"./Leistungspremie/Tagesleistung\";\r\nimport Gallery from \"./Gallery/Gallery\";\r\nimport Kvp from \"./Kvp/Kvp\";\r\nimport Wegweisser from \"./Wegweisser/Wegweisser\";\r\nimport GalleryPreview from \"./Gallery/GalleryPreview\";\r\nimport WegweisserSubGroups from \"./Wegweisser/WegweisserSubGroups\";\r\nimport WegweisserAnswers from \"./Wegweisser/WegweisserAnswers\";\r\nimport Arbeitszeiten from \"./FirmaInfo/Arbeitszeiten\";\r\nimport Veranstaltungen from './FirmaInfo/Veranstaltungen';\r\nimport Allgemein from './FirmaInfo/Allgemein';\r\nimport UrlaubOverview from \"./Urlaub/UrlaubOverview\";\r\nimport { getBeraterId } from \"../helpers/HelperFunctions\";\r\nimport DbTasks from \"../db/DbTasks\";\r\nimport * as sw from '../serviceWorkerRegistration';\r\n\r\n// const classes = {\r\n// appbar: {\r\n// top: 0,\r\n// height: 56,\r\n// maxHeight: 56\r\n// },\r\n// child: {\r\n// marginTop: 150,\r\n// }\r\n\r\n// };\r\n\r\nconst redirectToComponent = () => {\r\n var location = window.location.pathname;\r\n if(location.lastIndexOf(\"/\") !== 0){\r\n location = \"/\" + location.slice(1, location.indexOf(\"/\", 1) + 1);\r\n }\r\n switch(location){\r\n case \"/home\": return \r\n case \"/notifications\": return \r\n case \"/urlaub\": return \r\n case \"/krankenmeldung\": return \r\n case \"/monatsleistung\": return \r\n case \"/tagesleistung/\": return \r\n case \"/gallery\": return \r\n case \"/gallery/\": return \r\n case \"/kvp\": return \r\n case \"/wegparent/\": return \r\n case \"/wegweisser/\": return \r\n case \"/wegweisseranswer/\": return \r\n case \"/arbeitszeit\": return \r\n case \"/veranstaltungen\": return \r\n case \"/allgemein\": return \r\n case \"/urlauboverview\": return \r\n\r\n default: return \r\n }\r\n}\r\n\r\nfunction MainLayout() {\r\n const dispatch = useDispatch();\r\n\r\n const listAllEventListeners = () => {\r\n let elements = [];\r\n const allElements = document.querySelectorAll('*');\r\n const types = [];\r\n for (let ev in window) {\r\n if (/^on/.test(ev)) types[types.length] = ev;\r\n }\r\n \r\n for (let i = 0; i < allElements.length; i++) {\r\n const currentElement = allElements[i];\r\n for (let j = 0; j < types.length; j++) {\r\n if (typeof currentElement[types[j]] === 'function') {\r\n elements.push({\r\n \"node\": currentElement,\r\n \"listeners\": [ {\r\n \"type\": types[j],\r\n \"func\": currentElement[types[j]].toString(),\r\n }]\r\n });\r\n }\r\n }\r\n }\r\n \r\n console.log(\"Listeners : \", elements);\r\n //return elements.filter(element => element.listeners.length)\r\n };\r\n \r\n function addNotification(e) {\r\n // console.log(\"Add notification to the toolbar !\", notification);\r\n let notification = e.data.notification;\r\n let data = {\r\n text: notification.text,\r\n description: notification.description,\r\n type: \"baner\",\r\n }\r\n // dispatch(addNewNotification(data));\r\n dispatch(addNewNotification(data))\r\n }\r\n\r\nconst logOnConsole = (data) => {\r\n console.log(\"addNotification !!\");\r\n // dispatch(addNewNotification(data));\r\n}\r\n\r\n let isSubscribed = false;\r\n //dispatch(setInitialDataFromLocalDb());\r\n\r\n const getNotifications = () => {\r\n console.log(\"Notification call to server\");\r\n let beraterId = getBeraterId();\r\n //addNotification({text: \"Arbeitszeit info\", description: \"Die Arbeitszeit wurde geändert. Bitte überprüfen Sie die FirmaInfo / Arbeitszeiten im Menü.\"});\r\n new DbTasks().getDataFromDb(`api/FirmaInfo/ArbeitszeitNotification?id=${beraterId}`, { }, { method: \"GET\" })\r\n .then(res => {\r\n if(res) addNotification({text: \"Arbeitszeit info\", description: \"Die Arbeitszeit wurde geändert. Bitte überprüfen Sie die FirmaInfo / Arbeitszeiten im Menü.\"});\r\n });\r\n \r\n } \r\n\r\n\r\n\r\n\r\n useEffect(() => {\r\n //getNotifications();\r\n // console.table(\"Listeners :\", listeners);\r\n navigator.serviceWorker.removeEventListener('message', addNotification, true);\r\n navigator.serviceWorker.addEventListener('message', addNotification, true);\r\n\r\n\r\n Notification.requestPermission().then(function (status) {\r\n if (status === 'denied') {\r\n errorHandler('[Notification.requestPermission] Browser denied permissions to notification api.');\r\n } else if (status === 'granted') {\r\n console.log('[Notification.requestPermission] Initializing service worker.');\r\n initialiseServiceWorker();\r\n }\r\n });\r\n\r\n\r\n\r\n subscribe(); \r\n \r\n return () => {\r\n navigator.serviceWorker.removeEventListener('message', addNotification, true);\r\n //navigator.serviceWorker.removeEventListener(\"message\");\r\n console.log(\"Cleanup function running !\");\r\n //clearInterval(interval);\r\n }\r\n }, [])\r\n\r\n function initialiseServiceWorker() {\r\n if ('serviceWorker' in navigator) {\r\n //sw.register();\r\n initialiseState();\r\n //navigator.serviceWorker.register(sw).then(handleSWRegistration);\r\n } else {\r\n errorHandler('[initialiseServiceWorker] Service workers are not supported in this browser.');\r\n }\r\n };\r\n\r\n function handleSWRegistration(reg) {\r\n if (reg.installing) {\r\n console.log('Service worker installing');\r\n } else if (reg.waiting) {\r\n console.log('Service worker installed');\r\n } else if (reg.active) {\r\n console.log('Service worker active');\r\n }\r\n \r\n initialiseState(reg);\r\n }\r\n\r\n // function sendNotification() {\r\n // const img = \"/images/jason-leung-HM6TMmevbZQ-unsplash.jpg\";\r\n // const text = \"Take a look at this brand new t-shirt!\";\r\n // const title = \"New Product Available\";\r\n // const options = {\r\n // body: text,\r\n // icon: \"/images/jason-leung-HM6TMmevbZQ-unsplash.jpg\",\r\n // vibrate: [200, 100, 200],\r\n // tag: \"new-product\",\r\n // image: img,\r\n // badge: \"https://spyna.it/icons/android-icon-192x192.png\",\r\n // actions: [{ action: \"Detail\", title: \"View\", icon: \"https://via.placeholder.com/128/ff0000\" }]\r\n // };\r\n // navigator.serviceWorker.ready.then(function(serviceWorker) {\r\n // serviceWorker.showNotification(title, options);\r\n // });\r\n // }\r\n // Once the service worker is registered set the initial state\r\nfunction initialiseState(reg) {\r\n // Are Notifications supported in the service worker?\r\n // if (!(reg.showNotification)) {\r\n // errorHandler('[initialiseState] Notifications aren\\'t supported on service workers.');\r\n // return;\r\n // }\r\n\r\n // Check if push messaging is supported\r\n if (!('PushManager' in window)) {\r\n errorHandler('[initialiseState] Push messaging isn\\'t supported.');\r\n return;\r\n }\r\n\r\n \r\n // We need the service worker registration to check for a subscription\r\n navigator.serviceWorker.ready.then(function (reg) {\r\n // Do we already have a push message subscription?\r\n reg.pushManager.getSubscription()\r\n .then(function (subscription) {\r\n isSubscribed = subscription;\r\n //sendNotification();\r\n if (isSubscribed) {\r\n console.log('User is already subscribed to push notifications');\r\n } else {\r\n console.log('User is not yet subscribed to push notifications');\r\n }\r\n })\r\n .catch(function (err) {\r\n console.log('[req.pushManager.getSubscription] Unable to get subscription details.', err);\r\n });\r\n });\r\n}\r\nfunction errorHandler(message, e) {\r\n if (typeof e == 'undefined') {\r\n e = null;\r\n }\r\n console.error(message, e); \r\n}\r\n\r\n const urlB64ToUint8Array = (base64String) => {\r\n var padding = '='.repeat((4 - base64String.length % 4) % 4);\r\n var base64 = (base64String + padding)\r\n .replace(/\\-/g, '+')\r\n .replace(/_/g, '/');\r\n \r\n var rawData = window.atob(base64);\r\n var outputArray = new Uint8Array(rawData.length);\r\n \r\n for (var i = 0; i < rawData.length; ++i) {\r\n outputArray[i] = rawData.charCodeAt(i);\r\n }\r\n return outputArray;\r\n }\r\n \r\n const base64Encode = (arrayBuffer) => {\r\n return btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));\r\n }\r\n\r\n const subscribe = () => {\r\n navigator.serviceWorker.ready.then(function (reg) {\r\n var subscribeParams = { userVisibleOnly: true };\r\n \r\n //Setting the public key of our VAPID key pair.\r\n var applicationServerKey = urlB64ToUint8Array(\"BDewT6-XusZ82RQ0UIJswooRsh4Xrf1UYUvMo0GvUOHSipkxBPgMxcBDB2bQ61-nSi64Pi5A3ZM3LGLolXd3mvs\");\r\n subscribeParams.applicationServerKey = applicationServerKey;\r\n \r\n reg.pushManager.subscribe(subscribeParams)\r\n .then(function (subscription) {\r\n isSubscribed = true;\r\n \r\n var p256dh = base64Encode(subscription.getKey('p256dh'));\r\n var auth = base64Encode(subscription.getKey('auth'));\r\n //var subs = base64Encode(subscription.getKey('subscription'));\r\n \r\n var data = { PushEndpoint: subscription.endpoint, PushP256DH: p256dh, PushAuth: auth};\r\n console.log(\"Subscription data : \", data);\r\n \r\n new DbTasks().getDataFromDb(\"api/Devices/Create\", { ...data }, { method: \"POST\" })\r\n .then(res => {\r\n if(res){\r\n console.log(\"This device is added to subscription list.\");\r\n }else{\r\n console.warn(\"Adding device to subscription list failed.\");\r\n }\r\n })\r\n // $('#PushEndpoint').val(subscription.endpoint);\r\n // $('#PushP256DH').val(p256dh);\r\n // $('#PushAuth').val(auth);\r\n })\r\n .catch(function (e) {\r\n errorHandler('[subscribe] Unable to subscribe to push', e);\r\n });\r\n });\r\n }\r\n\r\n // const onNotifReceived = (res) => {\r\n // console.info('Yayyyyy, I just received a notification!!!', res);\r\n // //alert(res);\r\n // this.setState({ message: res });\r\n // }\r\n\r\n // const doNothing = () => {\r\n // window.location.reload();\r\n // };\r\n\r\n // render() { \r\n //const version = this.props.application.version;\r\n // let showUpdateBtn = this.props.application.serviceWorkerUpdated;\r\n return (\r\n
    \r\n \r\n {/*

    {this.state.message || \"\"}

    */}\r\n
    \r\n {/* \r\n {\r\n return ;\r\n }}\r\n />\r\n\r\n\r\n */}\r\n {redirectToComponent()}\r\n
    \r\n
    \r\n );\r\n // }\r\n}\r\n\r\nexport default withRouter(MainLayout);\r\n\r\n// const mapStateToProps = state => ({\r\n// application: state.app,\r\n// pageTitle: state.app.pageTitle\r\n// });\r\n\r\n// export default connect(\r\n// mapStateToProps,\r\n// { setTitle, toggleDrawer }\r\n// )(MainLayout);\r\n","import React, { useEffect } from 'react';\r\nimport './App.css';\r\nimport { createMuiTheme, MuiThemeProvider } from \"@material-ui/core/styles\";\r\nimport { Switch, Route, BrowserRouter as Router } from \"react-router-dom\";\r\nimport Login from './components/Login';\r\nimport { PrivateRoute } from './components/PrivateRoute';\r\n//import Home from './components/Home';\r\nimport MainLayout from './components/MainLayout';\r\nimport { useState } from 'react';\r\nimport { Button, makeStyles } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n flexGrow: 1,\r\n margin: theme.spacing(2),\r\n },\r\n allgemein:{\r\n // backgroundColor: 'red', \r\n margin: '5px',\r\n borderTop: '1px solid #1976d2', \r\n textAlign: 'center',\r\n display:'block'\r\n //display: 'none' \r\n },\r\n allgemeinNoContent: {\r\n display: 'none'\r\n },\r\n show: {\r\n display: 'block',\r\n position: 'fixed',\r\n bottom: '0px',\r\n width: '100%',\r\n backgroundColor: '#ffffff',\r\n borderTop: '2px solid #1976d2',\r\n marginBottom: '5px',\r\n paddingTop: '5px',\r\n },\r\n hide: {\r\n display: 'none',\r\n },\r\n promptBar: {\r\n position: 'absolute',\r\n bottom: '0px',\r\n width: '100%',\r\n backgroundColor: '#1976d2',\r\n },\r\n installText: {\r\n verticalAlign: 'top',\r\n marginRight: '10px',\r\n fontSize: '20px',\r\n }\r\n}));\r\n\r\nfunction App() {\r\n const theme = createMuiTheme({ shadows: Array(25).fill(\"none\"),\r\n typography: {\r\n useNextVariants: true,\r\n color: \"#444\"\r\n },\r\n palette: {\r\n primary: {\r\n main: \"#1976d2\",\r\n contrastText: \"#FFFFFF\",\r\n },\r\n secondary: {\r\n main: \"#dc004e\",\r\n contrastText: \"#FFFFFF\"\r\n }\r\n },\r\n\r\n});\r\n const [showInstallPrompt, setInstallPrompt] = useState(false);\r\n const [deferredPrompt, setDeferred] = useState(null);\r\n const classes = useStyles();\r\n\r\n const hideInstallPrompt = () => {\r\n // this.setState({InstallPrompt: false});\r\n // this.props.InstallPrompt(true);\r\n setInstallPrompt(false);\r\n }\r\n\r\n const addToHomeScreen = () => {\r\n // this.setState({ InstallPrompt: false });\r\n // this.props.InstallPrompt(true);\r\n setInstallPrompt(false);\r\n deferredPrompt.prompt(); // Wait for the user to respond to the prompt\r\n deferredPrompt.userChoice\r\n .then((choiceResult) => {\r\n\r\n if (choiceResult.outcome === 'accepted') {\r\n console.log('User accepted the prompt');\r\n } else {\r\n console.log('User dismissed the prompt');\r\n }\r\n\r\n setDeferred(null);\r\n //this.deferredPrompt = null;\r\n\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n //console.log(\"Listening for Install prompt\");\r\n window.addEventListener('beforeinstallprompt', (e) => {\r\n // Prevent Chrome 67 and earlier from automatically showing the prompt\r\n e.preventDefault();\r\n // Stash the event so it can be triggered later.\r\n setDeferred(e);\r\n console.log(\"Deffered prompt : \", e);\r\n //alert(\"Before install .\");\r\n //this.setState({ InstallPropmt: true });\r\n //if(!this.props.app.alreadyInstalled) this.setState({ InstallPrompt: true });\r\n if (!window.matchMedia('(display-mode: standalone)').matches) {\r\n setInstallPrompt(true);\r\n console.log('display-mode is standalone');\r\n }\r\n \r\n });\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n}, [])\r\n\r\n const routes = [\"/home\", \"/notifications\", \"/urlaub\", '/urlauboverview', \"/krankenmeldung\", \"/tagesleistung/:id/:year\", \"/tagesleistung/:id\", \"/monatsleistung\", \"/gallery\", \"/gallery/:id\", \"/kvp\", \"/wegparent/:id\", \r\n\"/wegweisser/:id\", \"/wegweisseranswer/:id\", \"/allgemein\", \"/veranstaltungen\", \"/arbeitszeit\"];\r\n //# B2E477\r\n return (\r\n \r\n
    \r\n \r\n \r\n \r\n {routes.map(route => )}\r\n \r\n \r\n \r\n App installieren ?\r\n this.setState({ InstallPropmt: false })}\r\n onClick={() => hideInstallPrompt()}\r\n >\r\n Nein\r\n \r\n addToHomeScreen()}>\r\n Ja\r\n \r\n
    \r\n
    \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import { TOGGLE_DRAWER, INITIALISE_STATE, TOGGLE_SPINNER, SW_INIT, SW_UPDATE, INSTALL_APP, SHOW_INSTALL_PROMPT } from \"../actions/Types\";\r\nconst initialState = {\r\n drawerOpen: false,\r\n version: \"0.1.0.5\",\r\n notifications: [],\r\n buttonLoadingEnabled: false,\r\n updateAvailable: true,\r\n installApp: false,\r\n alreadyInstalled: false,\r\n installPromptShowedTimes: 0,\r\n serviceWorkerInitialized: false,\r\n serviceWorkerUpdated: false,\r\n serviceWorkerRegistration: null,\r\n}\r\n\r\nexport default function app (state = initialState, action) {\r\n switch (action.type) {\r\n case INITIALISE_STATE:\r\n return { ...state, testData: action.payload };\r\n case TOGGLE_DRAWER:\r\n return { ...state, drawerOpen: action.payload };\r\n case TOGGLE_SPINNER:\r\n return { ...state, buttonLoadingEnabled: action.payload }\r\n case SW_INIT:\r\n return {\r\n ...state,\r\n serviceWorkerInitialized: !state.serviceWorkerInitialized,\r\n };\r\n case SW_UPDATE:\r\n return {\r\n ...state,\r\n serviceWorkerUpdated: !state.serviceWorkerUpdated,\r\n serviceWorkerRegistration: action.payload,\r\n };\r\n case INSTALL_APP:\r\n return {\r\n ...state,\r\n alreadyInstalled: action.payload\r\n }\r\n case SHOW_INSTALL_PROMPT:\r\n return {\r\n ...state,\r\n installApp: action.payload\r\n }\r\n default:\r\n return state;\r\n }\r\n}","import { ADD_NEW_NOTIFICATION, INITIALISE_STATE, MARK_NOTIFICATION_AS_READ } from \"../actions/Types\";\r\nconst initialState = {\r\n list: []\r\n}\r\n\r\nexport default function notification (state = initialState, action){\r\n switch (action.type){\r\n case INITIALISE_STATE:\r\n return {...state, list: action.payload.notifications};\r\n case ADD_NEW_NOTIFICATION: \r\n return { ...state, list: [action.payload, ...state.list] };\r\n case MARK_NOTIFICATION_AS_READ:\r\n return { ...state, list: action.payload};\r\n default:\r\n return state;\r\n }\r\n}","import { combineReducers } from 'redux';\r\n\r\nimport appReducer from './AppReducer';\r\nimport notificationReducer from './NotificationReducer';\r\n\r\nexport default combineReducers({\r\n app: appReducer,\r\n notifications: notificationReducer,\r\n})","import { createStore, applyMiddleware } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { composeWithDevTools } from 'redux-devtools-extension/developmentOnly';\r\nimport rootReducer from './reducers';\r\n\r\nconst initialState = {};\r\n\r\nconst middleware = [thunk];\r\n\r\nfunction configureStore() {\r\n return createStore(\r\n rootReducer,\r\n initialState,\r\n composeWithDevTools(\r\n applyMiddleware(...middleware)\r\n )\r\n )\r\n}\r\n\r\nexport default configureStore;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorkerRegistration from './serviceWorkerRegistration';\r\nimport { Provider } from 'react-redux';\r\nimport configureStore from './store';\r\nimport { SW_INIT, SW_UPDATE } from './actions/Types';\r\nimport { NotificationContainer } from 'react-notifications';\r\n\r\nconst store = configureStore();\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\n//serviceWorker.unregister();\r\nserviceWorkerRegistration.register({\r\n onSuccess: () => store.dispatch({ type: SW_INIT }),\r\n onUpdate: registration =>\r\n store.dispatch({ type: SW_UPDATE, payload: registration }),\r\n onWaiting: waiting =>\r\n store.dispatch({ type: SW_UPDATE, payload: waiting })\r\n});"],"sourceRoot":""}