{"version":3,"sources":["components/Reusable/TextFields.js","helpers/HelperFunctions.js","db/DbTasks.js","actions/Types.js","actions/UserActions.js","components/Login.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","components/Zeiterfassung/Zeiterfassung.js","components/Chat/UsersList.js","actions/ChatActions.js","components/Chat/SingleChat.js","components/MainLayout.js","App.js","serviceWorkerRegistration.js","reducers/AppReducer.js","reducers/NotificationReducer.js","reducers/MessageReducer.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","getSession","session","jwt","Cookies","get","base64","split","replace","JSON","parse","window","atob","console","log","logOut","remove","location","reload","getBeraterId","cookie","parseInt","nameid","getBase64","file","Promise","resolve","reject","reader","FileReader","readAsDataURL","onload","img","Image","src","result","extension","startsWith","newDataUri","width","height","canvas","document","createElement","ctx","getContext","drawImage","toDataURL","imageToDataUri","onerror","DbTasks","getRequestOption","method","data","useContentType","requestOption","headers","body","stringify","login","username","password","settings","a","requestOptions","fetch","process","then","handleResponse","user","set","token","secure","catch","err","retVal","initialDataLoad","dbNotifications","getAllNotifications","res","notifications","response","text","ok","status","logout","message","statusText","getDataFromApi","loadData","json","getDataFromDb","url","tryToGetNewToken","getDataAgain","has","localStorage","removeItem","this","db","Dexie","version","stores","table","toArray","sorted","sort","b","put","seen","description","createdDate","Date","where","delete","update","_b64","substring","raw","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","CHAT_CONNECTION","ADD_NEW_NOTIFICATION","MARK_NOTIFICATION_AS_READ","UPDATE_MESSAGE_LIST","ADD_MESSAGE_TO_LIST","SET_BERATER_CHAT_NAME","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","incorrectCredentials","Login","classes","React","useState","success","loading","local","setLocal","benutzer","setName","passwort","setPasswort","useEffect","history","push","buttonClassname","clsx","logIn","localProps","navigator","onLine","alert","Grid","container","direction","alignContent","justify","lg","md","sm","xs","style","textAlign","alt","e","currentTarget","key","Button","data-testid","onClick","CircularProgress","size","PrivateRoute","Component","component","rest","render","to","pathname","toggleDrawer","val","payload","toggleSpinner","minWidth","withRouter","useDispatch","birthdays","setBirthdays","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","MenuBook","FlightTakeoff","LocalHospital","Euro","CalendarToday","name","PhotoLibrary","UpdateComponent","sw","serviceWorkerRegistration","fontWeight","registrationWaiting","waiting","postMessage","addEventListener","target","grow","menuButton","marginRight","title","notificationMenu","search","shape","fade","common","white","breakpoints","up","searchIcon","padding","pointerEvents","inputRoot","inputInput","transition","transitions","create","sectionDesktop","sectionMobile","drawerOpen","showUpdateBtn","serviceWorkerUpdated","beraterName","chat","anchorEl","setAnchorEl","anchorElNotification","setAnchorNotification","mobileMoreAnchorEl","setMobileMoreAnchorEl","isMenuOpen","Boolean","isNotificationMenuOpen","isMobileMenuOpen","handleProfileMenuOpen","event","handleMobileMenuClose","handleMenuClose","notificationList","list","filter","anchor","menuId","renderMenu","keepMounted","transformOrigin","vertical","horizontal","open","onClose","MenuItem","renderMenuNotifications","Typography","noWrap","mobileMenuId","renderMobileMenu","anchorOrigin","aria-controls","aria-haspopup","AppBar","Toolbar","edge","goBack","lastIndexOf","slice","indexOf","appBarTitle","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","number2","backdrop","drawer","BackdropSpinner","Backdrop","showLoading","right","totalVacationDays","availableDays","usedDays","overtimeHours","requested","planned","showLoader","localState","setLocalState","dateRange","setDateRange","totalAvailable","previousYearRest","currentYearAvailableDays","usedThisYear","usedDates","plannedDates","urlaubRequest","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","setLoading","setSuccess","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","veranCustom","veranNoContent","modifiedDate","showContent","setShowContent","eventType","Type","hidden","textContent","allgemeinNoContent","setUrlaubData","showUsedDays","flexBasis","flexShrink","secondaryHeading","accordionBorder","accordionSummary","accordionSummaryParent","Zeiterfassung","expanded","setExpanded","setData","monthsData","generateTable","uhrezeitKommt","uhrezeitGeht","bruttoT","difBrT","saldoT","bruttoPeT","panel","isExpanded","monthSaldo","previousMonthArbeitzeit","dailyData","generateAccordion","inline","availableStatus","rootSearch","input","flex","iconButton","usersList","showClear","searchParam","renderUserSingle","Fragment","ListItemAvatar","Avatar","initials","InputBase","placeholder","addMessagesToList","rootInput","bottom","myMessages","friendMessages","alignRight","divider","noMessagesInfo","messageIconPath","messageList","messageListEl","useRef","chatConnection","friendUserId","on","messageToAdd","byMe","Math","random","toString","scrollToBottom","messageEl","scrlHeight","scrollHeight","scrollTo","behaviour","messages","sendMessage","localMessage","addMessage","Message","by","time","MessageField","spellCheck","x","y","d","msg","redirectToComponent","connection","addNotification","notification","messageType","startChatConnection","serviceWorker","removeEventListener","Notification","requestPermission","errorHandler","initialiseState","subscribe","stop","signalR","withUrl","accessTokenFactory","configureLogging","Debug","build","start","InitialiceChatConnection","reg","ready","pushManager","getSubscription","subscription","base64Encode","arrayBuffer","btoa","String","fromCharCode","apply","subscribeParams","userVisibleOnly","applicationServerKey","base64String","repeat","rawData","outputArray","urlB64ToUint8Array","p256dh","getKey","auth","PushEndpoint","PushP256DH","PushAuth","warn","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","isLocalhost","hostname","registerValidSW","swUrl","config","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","initialState","updateAvailable","installApp","alreadyInstalled","installPromptShowedTimes","serviceWorkerInitialized","combineReducers","action","testData","middleware","thunk","configureStore","createStore","rootReducer","composeWithDevTools","applyMiddleware","store","ReactDOM","origin","contentType","unregister","checkValidServiceWorker","onWaiting"],"mappings":"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","file":"static/js/main.e1769bde.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 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 Dexie from 'dexie';\r\nimport Cookies from 'js-cookie';\r\nimport { getSession, logOut } from '../helpers/HelperFunctions';\r\nimport 'whatwg-fetch'\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 const jwtToken = Cookies.get('__session');\r\n let session = getSession();\r\n console.log(\"session: \", session);\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 tryToGetNewToken = async (response, getDataAgain) => {\r\n // let jwtToken = this.getJwtToken();\r\n const jwtToken = Cookies.get('__session');\r\n if (response.status === 401 && response.headers.has('Token-Expired')) {\r\n logOut();\r\n //flag = true;\r\n\r\n // var refreshToken = this.getRefreshToken();\r\n\r\n // var refreshResponse = await this.refresh(jwtToken, refreshToken);\r\n // if (!refreshResponse.ok) {\r\n // return response; //failed to refresh so return original 401 response\r\n // }\r\n // var jsonRefreshResponse = await refreshResponse.json(); //read the json with the new tokens\r\n\r\n // this.saveJwtToken(jsonRefreshResponse.token);\r\n // this.saveRefreshToken(jsonRefreshResponse.refreshToken);\r\n // return await getDataAgain(); //repeat the original request\r\n }\r\n // else if (response.status === 401 && flag === false) {\r\n // //console.log(\"Flag :\");\r\n // localStorage.removeItem(\"token\");\r\n // window.location.reload();\r\n // }\r\n else { //status is not 401 and/or there's no Token-Expired header\r\n localStorage.removeItem(\"token\");\r\n window.location.reload();\r\n //return response; //return the original 401 response\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\nexport const CHAT_CONNECTION = \"CHAT_CONNECTION\";\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//Chat messages\r\nexport const UPDATE_MESSAGE_LIST = 'UPDATE_MESSAGE_LIST';\r\nexport const ADD_MESSAGE_TO_LIST = 'ADD_MESSAGE_TO_LIST';\r\nexport const SET_BERATER_CHAT_NAME = 'SET_BERATER_CHAT_NAME';\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 //console.log(\"User actions : \", user);\r\n if(user.error && user.error !== \"\") return false;\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\nimport { getSession } from '../helpers/HelperFunctions';\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 incorrectCredentials:{\r\n color: 'red', \r\n }\r\n}));\r\n\r\nconst Login = (props) => {\r\n const classes = useStyles();\r\n const [local, setLocal] = React.useState({\r\n success: false,\r\n loading: false,\r\n error: false\r\n })\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 getSession() ? props.history.push(\"/home\") : console.log(\"User not logged in.\");\r\n // return () => {\r\n // clearTimeout(timer.current);\r\n // };\r\n }, []);\r\n\r\n const buttonClassname = clsx({\r\n [classes.buttonSuccess]: local.success,\r\n [classes.button]: !local.success\r\n });\r\n\r\n const logIn = async (localProps) => {\r\n if (!local.loading) {\r\n setLocal({...local, success: false, loading: 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\r\n\r\n if(!loginReturn) {\r\n setLocal({...local, success: false, loading: false, error: true});\r\n }\r\n else {\r\n setLocal({...local, success: true, loading: false, error: false});\r\n localProps.history.push(\"/home\");\r\n }\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 //error={true}\r\n //helperText={\"Wrong pass or username\"}\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 {local.error && falsche Anmeldeinformationen}\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 {local.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 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, CHAT_CONNECTION } 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}\r\n\r\nexport const InitialiceChatConnection = (connection) => {\r\n return {\r\n type: CHAT_CONNECTION,\r\n payload: connection\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, MenuBook } 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 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 redirectTo(\"chatlist\")}>\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 redirectTo(\"mitarbeiterhandbuch\")}>\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n redirectTo(\"zeiterfassung\")}>\r\n \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 GoBack\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 position: 'sticky',\r\n top: 0,\r\n zIndex: 1200\r\n },\r\n menuButton: {\r\n marginRight: theme.spacing(0),\r\n },\r\n title: {\r\n display: 'block',\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 let beraterName = useSelector(state => state.chat.beraterName);\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 props.history.push(\"/chatlist\")}\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 const appBarTitle = () => {\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 \"Home\"\r\n case \"/notifications\": return \"Notifications\"\r\n case \"/urlaub\": return \"Urlaub\"\r\n case \"/krankenmeldung\": return \"Krankenmeldung\"\r\n case \"/monatsleistung\": return \"Monatsleistung\"\r\n case \"/tagesleistung/\": return \"Tagesleistung\"\r\n case \"/gallery\": return \"Gallery\"\r\n case \"/gallery/\": return \"GalleryPreview\"\r\n case \"/kvp\": return \"KVP\"\r\n case \"/wegparent/\": return \"Wegweisser\"\r\n case \"/wegweisser/\": return \"Wegweisser\"\r\n case \"/wegweisseranswer/\": return \"Wegweisser\"\r\n case \"/arbeitszeit\": return \"Arbeitszeiten\"\r\n case \"/veranstaltungen\": return \"Veranstaltungen\"\r\n case \"/allgemein\": return \"Allgemein\"\r\n case \"/urlauboverview\": return \"UrlaubOverview\"\r\n case \"/urlauboverviewplanned\": return \"UrlaubOverview\"\r\n case \"/zeiterfassung\": return \"Zeiterfassung\"\r\n case \"/mitarbeiterhandbuch\": return \"Mitarbeiterhandbuch\"\r\n case \"/chatlist\": return \"Chat\"\r\n case \"/chat/\": return beraterName\r\n \r\n default: return \"MitarbeiterApp\"\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 props.history.goBack()}\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 {appBarTitle()}\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}{props.number2 ? \"/\"+ props.number2 : \"\"}\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 totalVacationDays: 0,\r\n availableDays: 0,\r\n usedDays: 0,\r\n overtimeHours: 0,\r\n requested: 0,\r\n planned: 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 totalVacationDays: res.currentYearAvailableDays + res.previousYearRest, //ukupno predviđeno za trenutnu godinu + prenos iz prošle\r\n usedDays: res.usedDates.length,\r\n planned: res.plannedDates.length,\r\n requested: res.urlaubRequest.length,\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 props.history.push(\"/urlauboverviewplanned\")} 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 moment from 'moment';\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 marginTop: '0px',\r\n borderTop: '1px solid #1976d2',\r\n textAlign: 'center',\r\n display: 'block'\r\n },\r\n veranCustom: {\r\n margin: '5px',\r\n marginTop: '0px',\r\n //borderTop: '1px solid #1976d2',\r\n textAlign: 'right',\r\n display: 'block'\r\n },\r\n veranNoContent: {\r\n display: 'none'\r\n },\r\n modifiedDate: {\r\n textAlign: 'right'\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 let eventType = window.location.pathname === \"/mitarbeiterhandbuch\" ? 2 : 0; // 2 - stands for Mitarbeiterhandbuch type of event in Suite. 0 is for private events / Veranstaltungen\r\n new DbTasks().getDataFromDb(`api/FirmaInfo/Veranstaltungen`, { BeraterId: beraterId, Type: eventType }, { 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 document.getElementById(\"veran\" + index + \"date\").textContent = item.modifiedDate !== null ? moment(item.modifiedDate).format(\"DD.MM.YYYY\"): \"\";\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
    \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\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 let showUsedDays = window.location.pathname === \"/urlauboverview\" ? true : false;\r\n\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 {showUsedDays && (\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 )}\r\n\r\n {!showUsedDays && (\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\n )\r\n}\r\n\r\nexport default withRouter(UrlaubOverview);","import React, { useEffect, useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Accordion from '@material-ui/core/Accordion';\r\nimport AccordionDetails from '@material-ui/core/AccordionDetails';\r\nimport AccordionSummary from '@material-ui/core/AccordionSummary';\r\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\r\nimport { getBeraterId } from '../../helpers/HelperFunctions';\r\nimport DbTasks from '../../db/DbTasks';\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\nimport { FaBusinessTime } from 'react-icons/fa';\r\nimport { FaSignInAlt } from 'react-icons/fa';\r\nimport { FaSignOutAlt } from 'react-icons/fa';\r\nimport { FaCalendarDay } from 'react-icons/fa';\r\nimport { FaUserClock } from 'react-icons/fa';\r\nimport { Grid } from '@material-ui/core';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n },\r\n heading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n flexBasis: '33.33%',\r\n flexShrink: 0,\r\n },\r\n secondaryHeading: {\r\n fontSize: theme.typography.pxToRem(15),\r\n color: theme.palette.text.secondary,\r\n },\r\n table: {\r\n minWidth: 350,\r\n maxWidth: 500,\r\n marginLeft: 'auto',\r\n marginRight: 'auto'\r\n },\r\n accordionBorder: {\r\n borderBottom: '1px solid #1976d2',\r\n },\r\n accordionSummary: {\r\n '@media only screen and (max-width: 600px)': {\r\n display: 'block',\r\n },\r\n '@media only screen and (min-width: 601px)': {\r\n display: 'inline-block',\r\n }\r\n },\r\n accordionSummaryParent: {\r\n textAlign: 'left'\r\n }\r\n}));\r\n\r\nexport default function Zeiterfassung() {\r\n const classes = useStyles();\r\n const [expanded, setExpanded] = React.useState(false);\r\n const [data, setData] = useState([]);\r\n const [loading, setLoading] = useState(false);\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n let beraterId = getBeraterId();\r\n new DbTasks().getDataFromDb(`api/FirmaInfo/Zeiterfassung`,\r\n { BeraterId: beraterId }, \r\n { method: \"POST\" })\r\n .then(res => {\r\n console.log(res);\r\n setData(res.monthsData);\r\n setLoading(false);\r\n })\r\n .catch(() => setLoading(false))\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [])\r\n\r\n const handleChange = (panel) => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const generateTable = (data) => {\r\n\r\n return \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Uhrzeit gegangen */}\r\n \r\n {/* Uberstunden */}\r\n \r\n {/* Uberstunden insgesamt */}\r\n \r\n {/* Arbeitszeit insgesamt */}\r\n \r\n \r\n \r\n \r\n {data.map((row, index) => (\r\n \r\n \r\n {row.date ? moment(row.date).format(\"DD.MM\") : \"\"}\r\n \r\n {row.uhrezeitKommt ? moment(row.uhrezeitKommt).format(\"HH:mm\") : \"\"}\r\n {row.uhrezeitGeht ? moment(row.uhrezeitGeht).format(\"HH:mm\") : \"\"}\r\n {row.bruttoT}\r\n {row.difBrT}\r\n {row.saldoT}\r\n {row.bruttoPeT}\r\n \r\n ))}\r\n \r\n
    \r\n
    \r\n }\r\n\r\n const generateAccordion = (data) => {\r\n\r\n return (\r\n \r\n }\r\n aria-controls=\"panel1bh-content\"\r\n id=\"panel1bh-header\"\r\n className={classes.accordionBorder}\r\n >\r\n {/*
    */}\r\n {/* {data.month} */}\r\n \r\n \r\n {data.month}\r\n \r\n \r\n Uberstunden insgesamt: {data.monthSaldo}\r\n \r\n \r\n Arbeitszeit insgesamt: {data.previousMonthArbeitzeit}\r\n \r\n \r\n \r\n \r\n {data.dailyData && generateTable(data.dailyData)}\r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n
    \r\n {data && data.map(item => generateAccordion(item))}\r\n {data && data.length === 0 &&

    There is no data available at the moment.

    }\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 List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport Divider from '@material-ui/core/Divider';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport { Grid } from '@material-ui/core';\r\nimport { withRouter } from 'react-router';\r\nimport DbTasks from '../../db/DbTasks';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SearchIcon from '@material-ui/icons/Search';\r\nimport { Remove } from '../../bundles/IconsBundle';\r\n\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '90%',\r\n //maxWidth: '36ch',\r\n backgroundColor: theme.palette.background.paper,\r\n\r\n flexGrow: 1,\r\n margin: theme.spacing(0),\r\n },\r\n inline: {\r\n display: 'inline',\r\n },\r\n availableStatus: {\r\n width: 10,\r\n height: 10,\r\n backgroundColor: 'green',\r\n borderRadius: '40%'\r\n },\r\n rootSearch: {\r\n margin: theme.spacing(1),\r\n padding: '2px 4px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n width: '100%',\r\n border: '1px solid #cce0ff'\r\n },\r\n input: {\r\n marginLeft: theme.spacing(1),\r\n flex: 1,\r\n },\r\n iconButton: {\r\n padding: 10,\r\n color: '#1976d2',\r\n },\r\n}));\r\n\r\n\r\nfunction UsersList(props) {\r\n const classes = useStyles();\r\n //const [usersList, setUsersList] = useState([]);\r\n const [localState, setLocalState] = useState({\r\n usersList: [],\r\n showLoading: true,\r\n reload: false,\r\n showClear: false\r\n });\r\n // const [showLoading, setLoading] = useState(true);\r\n // const [reload, setReload] = useState(false);\r\n // const [showClear, setClear] = useState(false);\r\n\r\n useEffect(() => {\r\n let searchParam = document.getElementById(\"userSearch\").value || \"\";\r\n new DbTasks().getDataFromDb(`api/Chat/GetChatUsers/?userSearch=${searchParam}`, {}, { method: \"GET\" })\r\n .then(res => {\r\n //console.log(\"Chat users : \", res);\r\n setLocalState({...localState, usersList: res, showLoading: false });\r\n // setUsersList(res);\r\n // setLoading(false);\r\n }).catch(() => {\r\n setLocalState({ showLoading: false });\r\n //setLoading(false);\r\n alert(\"Error happened while getting chat users.\")\r\n });\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n }, [localState.reload]);\r\n\r\n const openChatHistory = (id, beraterName) => {\r\n //setBeraterChatName(beraterName);\r\n props.history.push(`/chat/${id}`);\r\n }\r\n\r\n const renderUserSingle = (data) => {\r\n return (\r\n openChatHistory(data.id, data.beraterName)}>\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 return (\r\n \r\n \r\n \r\n {\r\n if (e.currentTarget.value !== \"\") {\r\n setLocalState({...localState, showClear: true });\r\n }else{\r\n setLocalState({...localState, showClear: false });\r\n }\r\n }}\r\n onKeyPress={(e) => {\r\n if(e.key === \"Enter\"){\r\n setLocalState({...localState, reload: !localState.reload });\r\n }\r\n }}\r\n //inputProps={{ 'aria-label': 'search google maps' }}\r\n />\r\n {localState.showClear === true ?\r\n {\r\n setLocalState({...localState, reload: !localState.reload, showClear: false });\r\n document.getElementById(\"userSearch\").value = \"\";\r\n }}\r\n className={classes.iconButton}\r\n aria-label=\"search\">\r\n \r\n :\r\n setLocalState({...localState, reload: !localState.reload })}\r\n className={classes.iconButton}\r\n aria-label=\"search\">\r\n \r\n \r\n\r\n }\r\n\r\n \r\n {/* setSearch(e.currentTarget.value)} \r\n //value={searchValue}\r\n id=\"userSearch\"\r\n type=\"text\"\r\n label=\"User search\"\r\n variant=\"outlined\"\r\n fullWidth={true}\r\n //error={true}\r\n //helperText={\"Wrong pass or username\"}\r\n onKeyPress={(e) => {\r\n if(e.key === \"Enter\"){\r\n setReload(!reload);\r\n }\r\n }}\r\n class={classes.elementSpacing}\r\n // style={style.textField} \r\n /> */}\r\n \r\n {localState.usersList && localState.usersList.map((item) => renderUserSingle(item))}\r\n\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default withRouter(UsersList);","import { UPDATE_MESSAGE_LIST, ADD_MESSAGE_TO_LIST, SET_BERATER_CHAT_NAME } from '../actions/Types';\r\n\r\nexport const initiateMesageList = val => {\r\n return {\r\n type: UPDATE_MESSAGE_LIST,\r\n payload: val.messages,\r\n beraterName: val.beraterName || \"\"\r\n };\r\n};\r\n\r\nexport const addMessagesToList = val => {\r\n return {\r\n type: ADD_MESSAGE_TO_LIST,\r\n payload: val,\r\n //beraterName: val.beraterName || \"\"\r\n };\r\n};\r\n\r\nexport const setBeraterChatName = val => {\r\n return {\r\n type: SET_BERATER_CHAT_NAME,\r\n payload: val,\r\n }\r\n}","import React, { useEffect, useRef, useState } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport { withRouter } from 'react-router';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport DbTasks from '../../db/DbTasks';\r\nimport { addMessagesToList, initiateMesageList } from '../../actions/ChatActions';\r\nimport BackdropSpinner from '../Reusable/BackdropSpinner';\r\nimport InputBase from '@material-ui/core/InputBase';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport './Chat.css'\r\nimport { Divider, Grid, IconButton, List } from '@material-ui/core';\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n width: '100%',\r\n //maxWidth: '36ch',\r\n height: '120%',\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n rootInput: {\r\n padding: '2px 4px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justify: 'center',\r\n minWidth: 300,\r\n maxWidth: 400,\r\n position: 'fixed',\r\n left: '50%',\r\n transform: 'translate(-50%, 0)',\r\n bottom: 10,\r\n border: '1px solid black',\r\n },\r\n inline: {\r\n display: 'inline',\r\n },\r\n myMessages: {\r\n backgroundColor: '#dedede',\r\n textAlign: 'right',\r\n marginTop: '5px',\r\n borderRadius: '5px',\r\n // maxWidth: '70%'\r\n },\r\n friendMessages: {\r\n backgroundColor: '#83acd6',\r\n textAlign: 'left',\r\n marginTop: '5px',\r\n borderRadius: '5px',\r\n color: '#ffffff'\r\n // maxWidth: '70%'\r\n },\r\n alignRight: {\r\n marginRight: 0,\r\n },\r\n input: {\r\n marginLeft: theme.spacing(1),\r\n flex: 1,\r\n },\r\n iconButton: {\r\n padding: 10,\r\n },\r\n divider: {\r\n height: 28,\r\n margin: 4,\r\n },\r\n noMessagesInfo:{\r\n alignSelf: 'center'\r\n }\r\n}));\r\n\r\nconst messageIconPath = \"M19.5,2.1c0.7-0.2,1.4,0,1.9,0.5c0.5,0.5,0.7,1.3,0.5,1.9l-1.2,4.2c-0.1,0.4-0.5,0.6-0.9,0.5c-0.4-0.1-0.6-0.5-0.5-0.9l1.2-4.2c0.1-0.2-0.1-0.4-0.1-0.5c-0.1-0.1-0.2-0.2-0.4-0.1L3.8,8.2C3.6,8.3,3.5,8.5,3.5,8.6c0,0.1,0,0.3,0.2,0.5l3.4,2.1c0.4,0.2,0.5,0.7,0.2,1c-0.1,0.2-0.4,0.4-0.6,0.4c-0.1,0-0.3,0-0.4-0.1l-3.4-2.1C2.3,9.9,1.9,9.2,2,8.4C2.1,7.6,2.7,7,3.4,6.8L19.5,2.1z M18,12.3c0.1-0.4,0.5-0.6,0.9-0.5c0.4,0.1,0.6,0.5,0.5,0.9l-2.3,7.8c-0.2,0.8-0.8,1.3-1.6,1.4c-0.1,0-0.2,0-0.3,0c-0.7,0-1.3-0.3-1.7-0.9l-4.1-6.8c-0.2-0.3-0.1-0.7,0.1-0.9l5.8-5.9c0.3-0.3,0.8-0.3,1.1,0c0.3,0.3,0.3,0.8,0,1.1L11.1,14l3.8,6.3c0.1,0.2,0.4,0.2,0.4,0.2c0.1,0,0.3-0.1,0.4-0.3L18,12.3z\"\r\n\r\nfunction SingleChat(props) {\r\n const classes = useStyles();\r\n const messageList = useSelector(state => state.chat.messageList) || [];\r\n const [showLoading, setLoading] = useState(true);\r\n const dispatch = useDispatch();\r\n const messageListEl = useRef(null);\r\n\r\n const chatConnection = useSelector(state => state.app.chatConnection);\r\n const friendUserId = props.match.params.id;\r\n //console.log(\"Chat connection : \", chatConnection);\r\n\r\n useEffect(() => {\r\n chatConnection && chatConnection.on(\"ReceiveMessage\", function (user, message) {\r\n console.log(\"chat user and message : \", user, message);\r\n if (user === parseInt(friendUserId)) {\r\n console.log(\"Current message list : \", messageList);\r\n //addMessage({ byMe: false, message });\r\n let messageToAdd = { byMe: false, id: Math.random().toString(), message: message }\r\n dispatch(addMessagesToList(messageToAdd));\r\n }\r\n });\r\n console.log(\"Running api : \", messageList.length);\r\n\r\n\r\n return () => {\r\n console.log(\"Running cleanup function !\");\r\n }\r\n },\r\n [chatConnection]\r\n );\r\n\r\n const scrollToBottom = (e) => {\r\n //e.preventDefault();\r\n let messageEl = document.getElementById(\"messageListContainer\");\r\n let scrlHeight = messageEl.scrollHeight;\r\n messageEl.scrollTo({ left: 0, top: scrlHeight, behaviour: \"smooth\" })\r\n }\r\n\r\n useEffect(() => {\r\n scrollToBottom();\r\n }, [messageList])\r\n\r\n\r\n useEffect(() => {\r\n new DbTasks().getDataFromDb(`api/Chat/GetChatHistory?id=${friendUserId}`, {}, { method: \"GET\" })\r\n .then(res => {\r\n dispatch(initiateMesageList(res));\r\n setLoading(false);\r\n })\r\n .catch((err) => {\r\n setLoading(false);\r\n alert(\"Error happened while getting the chat history.\");\r\n\r\n });\r\n\r\n return () => {\r\n console.log(\"Clearing timeout\");\r\n // clearTimeout(scrollAfter);\r\n }\r\n\r\n }, [])\r\n\r\n // chatConnection && chatConnection.on(\"ReceiveMessage\", function (user, message) {\r\n // console.log(\"chat user and message : \", user, message);\r\n // if (user === parseInt(friendUserId)) {\r\n // addMessage({ byMe: false, message });\r\n // }\r\n // });\r\n\r\n const sendMessage = () => {\r\n let localMessage = document.getElementById(\"chatTypedMessage\").value || \"\";\r\n if (localMessage === \"\" || localMessage === \"\\n\") return;\r\n\r\n new DbTasks().getDataFromDb(`api/Chat/SendMessage`, { beraterId: parseInt(friendUserId), message: localMessage }, { method: \"POST\" })\r\n .then(res => {\r\n console.log(\"Send message res : \", res);\r\n //setMessageList(res);\r\n });\r\n // chatConnection && chatConnection.invoke(\"SendMessage\", friendUserId, localMessage)\r\n // .catch(function (err) {\r\n // console.log(\"Message sent !\");\r\n // return console.error(err.toString());\r\n // });\r\n addMessage({ byMe: true, message: localMessage });\r\n //setLocalMessage(null);\r\n document.getElementById(\"chatTypedMessage\").value = \"\";\r\n }\r\n\r\n const addMessage = (data) => {\r\n console.log(\"Add message list: \", messageList);\r\n let messageToAdd = { byMe: data.byMe, id: messageList.length + 1, message: data.message }\r\n dispatch(addMessagesToList(messageToAdd));\r\n scrollToBottom();\r\n }\r\n\r\n const Message = ({ id, message, by, time }) => {\r\n\r\n return (\r\n <>\r\n
  • \r\n {message}\r\n {/* Sent {time} */}\r\n
  • \r\n \r\n )\r\n }\r\n\r\n const MessageField = () => {\r\n\r\n return (\r\n <>\r\n
    \r\n {\r\n if (e.key === \"Enter\") {\r\n e.preventDefault();\r\n sendMessage()\r\n }\r\n }}\r\n name=\"\"\r\n id=\"chatTypedMessage\"\r\n placeholder=\"Write your message...\" spellCheck={false}>\r\n sendMessage()}\r\n className=\"btn btn-small btn-send\">\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
    \r\n
      \r\n {messageList.length === 0 &&
    • \r\n
      \r\n Hier noch keine Nachricht.

      \r\n Nachricht senden mit dem \r\n \r\n \r\n
      \r\n \r\n
    • }\r\n {messageList.length > 0 && messageList.map(msg => {\r\n const { id, initials, message, byMe, time } = msg\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\nexport default withRouter(SingleChat);\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 Zeiterfassung from \"./Zeiterfassung/Zeiterfassung\";\r\n\r\n// import { HubConnectionBuilder } from '@aspnet/signalr';\r\n//import * as signalR from '@aspnet/signalr';\r\nimport * as signalR from '@microsoft/signalr';\r\nimport Cookies from 'js-cookie';\r\nimport UsersList from \"./Chat/UsersList\";\r\nimport SingleChat from \"./Chat/SingleChat\";\r\nimport { InitialiceChatConnection } from '../actions/AppActions';\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 case \"/urlauboverviewplanned\": return \r\n case \"/mitarbeiterhandbuch\": return \r\n case \"/zeiterfassung\": return \r\n case \"/chatlist\": return \r\n case \"/chat/\": return \r\n\r\n default: return \r\n }\r\n}\r\n\r\nfunction MainLayout() {\r\n const dispatch = useDispatch();\r\n let connection = null;\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 console.log(\"Add notification res : \", 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\r\n if(notification.messageType !== 4) dispatch(addNewNotification(data))\r\n }\r\n\r\n const 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\r\n startChatConnection();\r\n //getNotifications();\r\n // console.table(\"Listeners :\", listeners);\r\n if(navigator.serviceWorker){\r\n navigator.serviceWorker.removeEventListener('message', addNotification, true);\r\n navigator.serviceWorker.addEventListener('message', addNotification, true);\r\n }\r\n \r\n // if(window.document.documentMode){\r\n Notification && 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\r\n subscribe();\r\n\r\n return () => {\r\n if(navigator.serviceWorker) 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 connection && connection.stop();\r\n }\r\n }, [])\r\n\r\n const startChatConnection = () => {\r\n const jwt = Cookies.get('__session');\r\n connection = new signalR.HubConnectionBuilder()\r\n //.withUrl(\"https://localhost:44393/chat\", \r\n .withUrl(`${process.env.REACT_APP_LOCAL_API_URL}chat`, \r\n { accessTokenFactory: () => jwt,\r\n }\r\n ).configureLogging(signalR.LogLevel.Debug)\r\n .build();\r\n \r\n\r\n //Disable send button until connection is established\r\n //document.getElementById(\"sendButton\").disabled = true;\r\n\r\n // connection.on(\"ReceiveMessage\", function (user, message) {\r\n // console.log(\"chat user and message : \", user, message);\r\n // // var msg = message.replace(/&/g, \"&\").replace(//g, \">\");\r\n // // var encodedMsg = user + \" says \" + msg;\r\n // // var li = document.createElement(\"li\");\r\n // // li.textContent = encodedMsg;\r\n // // document.getElementById(\"messagesList\").appendChild(li);\r\n // }); \r\n\r\n connection\r\n .start() //{ transport: 'longPolling' }\r\n .then(function () {\r\n //document.getElementById(\"sendButton\").disabled = false;\r\n console.log(\"Chat Connection started !\");\r\n \r\n }).catch(function (err) {\r\n console.log(\"Chat error : \", err);\r\n connection.stop().then(res => console.log(\"Connection stoped.\"));\r\n //return console.error(err.toString());\r\n });\r\n\r\n dispatch(InitialiceChatConnection(connection));\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\n function 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 && 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\n function 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 && 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', '/urlauboverviewplanned', \"/krankenmeldung\", \"/tagesleistung/:id/:year\", \"/tagesleistung/:id\", \"/monatsleistung\", \"/gallery\", \"/gallery/:id\", \"/kvp\", \"/wegparent/:id\", \r\n\"/wegweisser/:id\", \"/wegweisseranswer/:id\", \"/allgemein\", \"/veranstaltungen\", \"/arbeitszeit\", \"/mitarbeiterhandbuch\", \"/zeiterfassung\", \"/chatlist\", \"/chat/:id\"];\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","// 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 { TOGGLE_DRAWER, INITIALISE_STATE, TOGGLE_SPINNER, SW_INIT, SW_UPDATE, INSTALL_APP, SHOW_INSTALL_PROMPT, CHAT_CONNECTION } from \"../actions/Types\";\r\nconst initialState = {\r\n drawerOpen: false,\r\n version: \"0.1.0.7\",\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 chatConnection: 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 case CHAT_CONNECTION:\r\n return {\r\n ...state,\r\n chatConnection: 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 { ADD_MESSAGE_TO_LIST, UPDATE_MESSAGE_LIST, SET_BERATER_CHAT_NAME } from \"../actions/Types\";\r\nconst initialState = {\r\n messageList: [],\r\n beraterName: \"\"\r\n}\r\n\r\nexport default function messages (state = initialState, action){\r\n switch (action.type){\r\n case UPDATE_MESSAGE_LIST:\r\n return {...state, messageList: action.payload, beraterName: action.beraterName};\r\n case ADD_MESSAGE_TO_LIST: \r\n return { ...state, messageList: [...state.messageList, action.payload] };\r\n case SET_BERATER_CHAT_NAME: \r\n return { ...state, beraterName: 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\nimport chat from './MessageReducer';\r\n\r\nexport default combineReducers({\r\n app: appReducer,\r\n notifications: notificationReducer,\r\n chat: chat,\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\nimport \"core-js/stable\";\r\nimport \"regenerator-runtime/runtime\";\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":""}