{"version":3,"sources":["state/store.ts","utils/httpClient.ts","services/AuthenticationService.tsx","components/styledButton.tsx","assets/logo.svg","components/filterTasks.tsx","containers/filterTasksContainer.tsx","components/navbar.tsx","components/login.tsx","components/profileCheck.tsx","routes/utils.tsx","utils/assignColors.ts","extensions/date.ts","components/loadingSpinner.tsx","types/tasks.ts","components/taskFormTags.tsx","components/taskFormLinks.tsx","components/taskFormEffort.tsx","components/dialogNewTask.tsx","types/mainBoard.ts","utils/taskValidators.ts","types/tags.ts","types/board.ts","containers/createTaskContainer.tsx","components/card.tsx","assets/avatar.jpg","components/task.tsx","components/columnTitle.tsx","components/column.tsx","components/dropArea.tsx","components/newTask.tsx","components/stateViewSelector.tsx","components/boardLayout.tsx","components/mainBoard.tsx","hooks/useRealtimeConnection.ts","state/realtime.context.tsx","containers/boardContainer.tsx","utils/mappers/mainBoardToColumns.ts","components/done.tsx","containers/doneContainer.tsx","types/backlog.ts","components/backlog.tsx","containers/backlogContainer.tsx","utils/mappers/backlogToWeekSections.ts","components/uploadAvatar.tsx","components/pickColor.tsx","utils/imageEncoder.ts","components/changePassword.tsx","types/role.ts","components/profileSettings.tsx","utils/sizeValidator.ts","containers/profileUpdateContainer.tsx","containers/profileInitContainer.tsx","utils/stylingHelper.ts","components/userManagement.tsx","components/registerUser.tsx","components/editUser.tsx","components/deleteUser.tsx","routes/index.tsx","utils/theme.ts","App.tsx","reportWebVitals.ts","index.tsx"],"names":["useStore","create","set","mainBoard","backlog","done","user","ownerId","assigneeId","isDropAreaVisible","setMainBoard","state","setBacklog","setDone","setUser","resetUser","setOwnerId","setAssigneeId","setIsDropAreaVisible","isDoneVisible","serverUrl","process","apiUrl","useAxios","withCredentials","axiosInstance","axios","baseURL","headers","Delete","userId","a","httpClient","delete","res","response","data","status","succeeded","errors","ChangePassword","oldPassword","newPassword","newPasswordConfirm","dto","post","IsAdmin","get","authenticationService","useLogin","username","password","loginDto","userModel","userViewModel","id","firstName","lastName","undefined","useRegister","newUser","useEdit","patch","useIsLoggedIn","isLoggedIn","GetAllUsers","excludeSelf","Logout","console","error","confirmEmail","o","confirmPassword","StyledButtonComponent","styled","Button","textTransform","StyledButton","props","children","other","useStyles","makeStyles","theme","createStyles","container","display","alignItems","maxWidth","flexWrap","boxSizing","padding","justifyContent","fieldsContainer","margin","title","color","palette","primary","main","fontWeight","fontSize","field","width","borderBottomColor","borderColor","borderWidth","FilterTasks","creatorId","creators","assignees","handleChangeCreator","handleChangeAssignee","handleSwitch","checked","classes","className","style","onClick","name","FormControl","fullWidth","FormHelperText","Select","labelId","value","onChange","e","map","creator","MenuItem","assignee","FilterTasksContainer","setData","setAreAllTasksVisible","useState","setCreators","setAssignees","setChecked","useEffect","then","users","items","performSearch","params","CreatorId","AssigneeId","tasks","mapResponseToTasks","catch","event","target","keys","Object","key","t","columnId","grow","flexGrow","menuButton","marginRight","spacing","logo","paddingTop","paddingBottom","sectionDesktop","breakpoints","up","sectionMobile","fullScreenButton","backgroundColor","NavBar","filteringData","basicHeaderOnly","anchorEl","setAnchorEl","mobileMoreAnchorEl","setMobileMoreAnchorEl","userName","setUserName","hasLoggedOut","setHasLoggedOut","userIsAdmin","setUserIsAdmin","openUserManagement","setOpenUserManagement","openProfileSettings","setOpenProfileSettings","isMenuOpen","Boolean","isMobileMenuOpen","handleProfileMenuOpen","currentTarget","handleMobileMenuClose","handleMenuClose","isAdmin","trim","menuId","renderMenu","Menu","anchorOrigin","vertical","horizontal","keepMounted","transformOrigin","open","onClose","mobileMenuId","renderMobileMenu","IconButton","aria-label","aria-controls","aria-haspopup","size","to","from","AppBar","position","boxShadow","Toolbar","src","Logo","alt","elem","document","getElementById","requestFullscreen","edge","saveButton","marginTop","background","secondary","Login","login","setPassword","setStatus","setErrors","userIsLoggedIn","checkAuthentication","includes","Fragment","CssBaseline","Container","length","Alert","severity","index","renderAlert","onSubmit","evt","preventDefault","handleLoginSubmit","required","TextField","variant","autoFocus","autoComplete","type","inputProps","maxLength","ProfileCheck","history","useHistory","put","redirectUrl","push","PrivateRoute","Component","component","rest","isAuthenticated","setIsAuthenticated","isLoading","setIsLoading","render","pathname","location","AdminRoute","setIsAdmin","adjustBrightness","bgColor","charAt","substring","c","parseInt","col","Math","pow","Date","prototype","ConvertToYearMonthDayString","this","getFullYear","getMonth","slice","getDate","buttonProgress","top","left","marginLeft","backdrop","zIndex","flexDirection","marginBottom","LoadingSpinner","Backdrop","CircularProgress","ValidTaskEfforts","fifteenMinutes","halfHour","oneHour","twoHours","threeHours","fourHours","fiveHours","row","list","listStyle","paddingLeft","listItem","chip","TaskFormTags","isMounted","checkIsAdmin","tags","tag","idx","Chip","label","onDelete","_","handleTagRemoval","showTagInput","Autocomplete","disablePortal","options","tagsForAutocomplete","newValue","addTagFromAutocomplete","renderInput","onBlur","onKeyPress","sx","renderTagSelector","TaskFormLinks","links","link","href","handleLinkRemoval","showLinkInput","TaskFormEffort","inputElement","select","effortInForm","handleFormEffortChange","InputProps","min","effortInModel","handleModelEffortChange","overflow","errorMessages","ColumnIds","DialogNewTask","isOpen","task","handleClose","alerts","fieldDate","handleChangeMenu","handleChangeEffort","handleSubmit","handleChange","handleChangeDate","addNewTag","removeTag","addNewLink","handleRemovedLink","dateForDisplay","setDateForDisplay","date","split","setShowTagInput","showLinksInput","setShowLinksInput","effort","setEffortInForm","toString","values","ShowAlert","alertMessage","alertRequired","alertDate","alertEffort","alertTitleLength","getAlertMessage","handleNewTag","handleNewLink","Dialog","aria-labelledby","DialogTitle","DialogContent","handleKeyPressForTask","v","multiline","description","handleKeyPressForLink","DialogActions","checkErrorsInForm","today","checkRequiredFields","checkIfEffortIsInvalid","checkTitleLength","checkDateTodayOrLater","selectedDateNoTime","tododate","TaskStatus","ColumnNames","CreateTaskContainer","closeSelf","taskId","initialToDoDate","setHours","tomorrow","setDate","getInitialDate","Guid","createEmpty","setTask","setTags","setLinks","setFieldDate","React","setAlertRequired","setAlertDate","setAlertEffort","setAlertTitleLength","loading","setLoading","existingTags","setExistingTags","taskFromApi","toDoDate","labels","clearAlerts","selectedDate","taskDto","prop","parseFloat","toFixed","indexOf","tagToRemove","filter","test","startsWith","linkToRemove","isDragging","passedDate","columnTitle","borderRadius","column","titleRow","textAlign","ownerName","picture","minWidth","height","tagsContainer","Card","getTime","getDay","isDateVisilbe","inProgress","isAssigneeMissing","isTagsListVisible","isTaskModalOpen","setIsTaskModalOpen","showEffort","profileImage","Task","draggableId","provided","snapshot","ref","innerRef","dragHandleProps","draggableProps","useStylesTitle","titleContainer","borderTopLeftRadius","borderTopRightRadius","circle","minwidth","plus","ColumnTitle","isAddVisible","Typography","Icon","Box","scrollbarWidth","msOverflowStyle","useStylesListContainer","listContainer","isActive","minHeight","TaskList","Column","isDropDisabled","droppableId","droppableProps","isDraggingOver","draggingOverWith","placeholder","isVisible","border","borderStyle","borderSpacing","DropArea","DroppableArea","section","root","NewTask","setOpen","Fab","tab","active","newTask","StateViewSelector","useLocation","textDecoration","globalRoot","maxHeight","overflowY","right","columnSmall","alignContent","BoardLayout","dropName","MainBoard","isDoneDisabled","lastColumn","columns","useRealtimeConnection","connection","setConnection","stop","newConnection","HubConnectionBuilder","withUrl","configureLogging","LogLevel","Warning","withAutomaticReconnect","build","startConnection","onclose","start","log","setTimeout","RealTimeStateContext","createContext","onUpdate","Function","clear","RealTimeProvider","Provider","updateHandler","on","off","useRealtimeClient","useContext","moveCardToNewColumn","originColumn","source","destinationColumn","destinationIndex","splice","fetchTasks","BoardContainer","dragOrigin","setDragOrigin","realtimeClient","review","toBeFinished","createColumnsForBoard","onDragEnd","result","destination","isDestinationSameAsSource","find","amountOfTasks","previousTaskId","previousTaskIndex","getPreviousTask","nextTaskId","nextTaskIndex","getNextTask","handleInColumnOrdering","moveIsFromTodayToTomorrow","moveIsFromTomorrowToToday","newStatus","inputState","updateTaskStatus","columnElements","r","onDragStart","origin","item","button","Done","showButton","getAllTasks","disableElevation","shouldGetAll","All","WeekSectionIds","DoneContainer","areAllTasksVisible","realtime","Backlog","isInProgressDisabled","lastSection","totalEffort","sectionElements","getTasks","BacklogContainer","realtimeConnection","sections","currentWeek","nextWeek","restWeeksTasks","createWeekSectionsForBacklog","originSection","destinationSection","err","moveCardToNewSection","large","imageContainer","InnerContainer","Paper","UploadAvatar","handleImageSelect","encodedImage","hidden","files","accept","Avatar","cell","PickColor","colors","selectColor","selectedColor","Cell","ColorPalette","allowedExtensions","RoleEnum","formControl","errorList","setOldPassword","setNewPassword","setNewPasswordConfirm","renderSuccessAlert","OuterContainer","ProfileSettings","handleSettingsUpload","handleColorSelection","handleEncodedImageSet","setColors","i","enqueueSnackbar","useSnackbar","createErrorMessage","message","autoHideDuration","file","validateFileExtension","megabyteInBytes","fileSizeValidator","image","setEncodedImage","fileReader","FileReader","onloadend","readAsDataURL","encodeImageToBase64","disabled","ProfileUpdateContainer","setSelectedColor","ProfileInitContainer","useUserManagementStyles","subtitle","buttonWrapper","primaryButton","secondaryButton","navButton","secondaryNavButton","readonly","UserManagement","successMsg","Role","getUserRoles","standard","admin","RegisterUser","register","email","setEmail","passwordConfirm","setPasswordConfirm","setFirstName","setLastName","role","setRole","handleRoleChange","EditUser","edit","setUsers","selectedUser","setSelectedUser","userDto","handleAbort","userResponse","userFound","u","handleUserChange","renderSelectUser","DeleteUser","AppRouter","exact","path","createTheme","adaptV4Theme","window","App","ThemeProvider","StyledEngineProvider","injectFirst","reportWebVitals","onPerfEntry","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","StrictMode"],"mappings":"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","file":"static/js/main.fbc8b978.chunk.js","sourcesContent":["import create from 'zustand';\nimport {IMainBoard} from '../types/mainBoard';\nimport {IDone} from '../types/done';\nimport {IBacklog} from '../types/backlog';\nimport {IUser} from '../types/user';\n\ntype StoreState = {\n mainBoard: IMainBoard;\n backlog: IBacklog;\n done: IDone;\n user: IUser;\n ownerId: string;\n assigneeId: string;\n isDropAreaVisible: boolean;\n setMainBoard: (mainBoard: IMainBoard) => void;\n setBacklog: (backlog: IBacklog) => void;\n setDone: (done: IDone) => void;\n setUser: (user: IUser) => void;\n resetUser: (user: IUser) => void;\n setOwnerId: (ownerId: string) => void;\n setAssigneeId: (assigneeId: string) => void;\n setIsDropAreaVisible: (isDoneVisible: boolean) => void;\n};\n\nexport const useStore = create(set => ({\n mainBoard: {},\n backlog: {},\n done: {},\n user: {},\n ownerId: '',\n assigneeId: '',\n isDropAreaVisible: false,\n setMainBoard: mainBoard => set(state => ({mainBoard})),\n setBacklog: backlog => set(state => ({backlog})),\n setDone: done => set(state => ({done})),\n setUser: user => set(state => ({user})),\n resetUser: user => set(state => ({})),\n setOwnerId: ownerId => set(state => ({ownerId})),\n setAssigneeId: assigneeId => set(state => ({assigneeId})),\n setIsDropAreaVisible: isDoneVisible => set(state => ({isDropAreaVisible: isDoneVisible}))\n}));\n","import axios from 'axios';\n\nexport const serverUrl = process.env.REACT_APP_API_URL ?? 'http://localhost:5000';\nconst apiVersion = 'V1';\nconst apiUrl = `${serverUrl}/api/${apiVersion}/`;\n\nexport const useAxios = (withCredentials: boolean = false) => {\n const axiosInstance = axios.create({\n baseURL: apiUrl,\n withCredentials: withCredentials,\n headers: {\n 'Content-Type': 'application/json'\n }\n });\n\n return axiosInstance;\n};\n","import axios from 'axios';\nimport {useStore} from '../state/store';\nimport {IUser, UserModel, UserViewModel} from '../types/user';\nimport {useAxios} from '../utils/httpClient';\n\n\nconst useLogin = () => {\n const httpClient = useAxios(true);\n const setUser = useStore(state => state.setUser);\n\n const login = async (username: string, password: string): Promise => {\n try {\n const loginDto: LoginDto = {username: username, password: password};\n const res = await httpClient.post('authentication/login', loginDto);\n const response = (res.data as LoginResponse);\n const userModel = response.userViewModel;\n\n setUser({\n id: userModel?.id ?? \"\",\n firstName: userModel?.firstName ?? \"\",\n lastName: userModel?.lastName ?? \"\",\n });\n\n return response;\n } catch (err: any) {\n // bad request with response (400)\n if (err.response && err.response.status === 400) {\n return {\n succeeded: false,\n errors: err.response.data.errors || [\"Ungültige Anfragedaten.\"]\n };\n }\n\n const response = {\n succeeded: false,\n errors: [\"Während des Prozesses ist ein unbekannter Fehler aufgetreten\"],\n userViewModel: undefined\n } as LoginResponse;\n return response;\n }\n }\n\n return login;\n}\n\nconst useIsLoggedIn = () => {\n const httpClient = useAxios(true);\n const setUser = useStore(state => state.setUser);\n\n const isLoggedIn = async (): Promise => {\n try {\n const res = await httpClient.get('authentication/isLoggedIn');\n const response = res?.data ?? {isLoggedIn: false} as IsLoggedInResponse;\n const userModel = response?.userViewModel;\n\n setUser({\n id: userModel?.id ?? \"\",\n firstName: userModel?.firstName ?? \"\",\n lastName: userModel?.lastName ?? \"\",\n });\n\n return response;\n } catch (err: any) {\n return {isLoggedIn: false} as IsLoggedInResponse;\n }\n }\n\n return isLoggedIn;\n}\n\nconst useRegister = () => {\n const httpClient = useAxios(true);\n\n const register = async (newUser: UserModel): Promise => {\n try {\n const res = await httpClient.post('authentication/register', newUser);\n const response = (res.data as BaseResponse);\n return response;\n } catch (err: any) {\n // bad request with response (400)\n if (err.response && err.response.status === 400) {\n return {\n succeeded: false,\n errors: err.response.data.errors || [\"Ungültige Anfragedaten.\"]\n };\n }\n return {\n succeeded: false,\n errors: [\"Während des Prozesses ist ein unbekannter Fehler aufgetreten\"]\n };\n }\n }\n\n return register;\n}\n\nconst useEdit = () => {\n const httpClient = useAxios(true);\n\n const edit = async (user: IUser): Promise => {\n try {\n const res = await httpClient.patch('/authentication/edit', user);\n const response = (res.data as BaseResponse);\n return response;\n } catch (err: any) {\n // bad request with response (400)\n if (err.response && err.response.status === 400) {\n return {\n succeeded: false,\n errors: err.response.data.errors || [\"Ungültige Anfragedaten.\"]\n };\n }\n return {\n succeeded: false,\n errors: [\"Während des Prozesses ist ein unbekannter Fehler aufgetreten\"]\n };\n }\n }\n\n return edit;\n}\n\nconst Delete = async (userId: string): Promise => {\n const httpClient = useAxios(true);\n\n try {\n const res = await httpClient.delete(`authentication/delete/${userId}`);\n const response = (res.data as BaseResponse);\n return response;\n } catch (err: any) {\n // bad request with response (400)\n if (err.response && err.response.status === 400) {\n return {\n succeeded: false,\n errors: err.response.data.errors || [\"Ungültige Anfragedaten.\"]\n };\n }\n return {\n succeeded: false,\n errors: [\"Während des Prozesses ist ein unbekannter Fehler aufgetreten\"]\n };\n }\n}\n\nconst ChangePassword = async (oldPassword: string, newPassword: string, newPasswordConfirm: string): Promise => {\n const httpClient = useAxios(true);\n\n try {\n const dto = {\n oldPassword: oldPassword,\n newPassword: newPassword,\n newPasswordConfirm: newPasswordConfirm\n };\n const res = await httpClient.post(\"/authentication/user/change-password\", dto);\n const response = (res.data as BaseResponse);\n return response;\n } catch (err: any) {\n // bad request with response (400)\n if (err.response && err.response.status === 400) {\n return {\n succeeded: false,\n errors: err.response.data.errors || [\"Ungültige Anfragedaten.\"]\n };\n }\n return {\n succeeded: false,\n errors: [\"Während des Prozesses ist ein unbekannter Fehler aufgetreten\"]\n };\n }\n}\n\nconst IsAdmin = async (): Promise => {\n const httpClient = useAxios(true);\n const res = await httpClient.get('authentication/isAdmin');\n return res?.data ?? false;\n}\n\nconst GetAllUsers = async (excludeSelf: boolean): Promise => {\n const httpClient = useAxios(true);\n const res = await httpClient.post('/authentication/users/getall', excludeSelf);\n return res?.data ?? [];\n}\n\nconst Logout = async (): Promise => {\n const httpClient = useAxios(true);\n\n try {\n await httpClient.post('authentication/logout');\n } catch (err) {\n console.error(err);\n }\n}\n\n// define public methods\nexport const authenticationService = {\n useLogin,\n useRegister,\n useEdit,\n useIsLoggedIn,\n Delete,\n ChangePassword,\n GetAllUsers,\n Logout,\n confirmEmail,\n confirmPassword,\n IsAdmin\n};\n\nfunction confirmEmail(o: any) {\n return axios.post(`authentication/confirmemail`, o);\n}\n\nfunction confirmPassword(o: any) {\n return axios.post(`authentication/confirmpassword`, o);\n}\n\ninterface LoginDto {\n username: string;\n password: string;\n}\n\ninterface LoginResponse extends BaseResponse {\n userViewModel?: UserViewModel;\n}\n\ninterface IsLoggedInResponse {\n isLoggedIn: boolean;\n userViewModel?: UserViewModel\n}\n\ninterface BaseResponse {\n succeeded: boolean;\n errors: string[];\n}","import React from 'react';\nimport { styled } from '@mui/material/styles';\nimport { Button, ButtonProps } from '@mui/material';\n\nconst StyledButtonComponent = styled(Button)({\n textTransform: 'none'\n});\n\nexport function StyledButton(props: ButtonProps) {\n const { children, ...other } = props;\n return {children};\n}\n","export default __webpack_public_path__ + \"static/media/logo.0ac3086f.svg\";","import React from 'react';\nimport { FormControl, FormHelperText, Select, MenuItem, Theme } from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport SearchIcon from '@mui/icons-material/Search';\nimport { StyledButton } from './styledButton';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n container: {\n display: 'flex',\n alignItems: 'center',\n maxWidth: '100%',\n flexWrap: 'wrap',\n boxSizing: 'border-box',\n padding: '0.4em 0',\n justifyContent: 'center'\n },\n fieldsContainer: {\n display: 'flex',\n margin: '0 10px 0 10px',\n alignItems: 'center'\n },\n title: {\n color: theme.palette.primary.main,\n fontWeight: 600,\n fontSize: '1.3em'\n },\n field: {\n width: '150px',\n margin: '0 5px 0 5px',\n '& p, div, svg': {\n color: 'white'\n },\n '& >div::before': {\n borderBottomColor: 'white'\n },\n '& fieldset': {\n borderColor: 'rgba(0, 0, 0, 0.23) !important',\n borderWidth: '1px !important'\n }\n }\n })\n);\n\ninterface IFilterTasksProps {\n creatorId: any;\n assigneeId: any;\n creators: any[];\n assignees: any[];\n handleChangeCreator: (event: React.ChangeEvent<{ value: string }>) => void;\n handleChangeAssignee: (event: React.ChangeEvent<{ value: string }>) => void;\n handleSwitch: (e: React.MouseEvent) => void;\n checked: any;\n}\n\nexport const FilterTasks: React.FC = ({\n creatorId,\n assigneeId,\n creators,\n assignees,\n handleChangeCreator,\n handleChangeAssignee,\n handleSwitch,\n checked\n}) => {\n const classes = useStyles();\n return (\n
\n
\n \n \n \n
\n {checked ? (\n
\n \n Inhaber\n handleChangeCreator(e as React.ChangeEvent<{ value: string }>)}\n >\n {creators.map(creator => (\n \n {creator.firstName} {creator.lastName}\n \n ))}\n \n \n \n Bearbeiter\n handleChangeAssignee(e as React.ChangeEvent<{ value: string }>)}\n >\n {assignees.map(assignee => (\n \n {assignee.firstName} {assignee.lastName}\n \n ))}\n \n \n
\n ) : null}\n
\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useAxios } from '../utils/httpClient';\nimport { FilterTasks } from '../components/filterTasks';\nimport { useStore } from '../state/store';\n\nexport interface IFilterTasksContainerProps {\n name: string;\n setData: any;\n setAreAllTasksVisible?: any;\n}\n\nexport const FilterTasksContainer: React.FC = ({ name, setData, setAreAllTasksVisible }) => {\n const httpClient = useAxios();\n const [creators, setCreators] = useState>([]);\n const [assignees, setAssignees] = useState>([]);\n const [checked, setChecked] = useState(false);\n const { setOwnerId, setAssigneeId, assigneeId, ownerId } = useStore(state => ({\n setOwnerId: state.setOwnerId,\n setAssigneeId: state.setAssigneeId,\n assigneeId: state.assigneeId,\n ownerId: state.ownerId\n }));\n\n useEffect(() => {\n httpClient.get('users/profile').then(res => {\n const users = res.data.items;\n setAssignees(users);\n setCreators(users);\n });\n }, []);\n\n const handleChangeCreator = (event: React.ChangeEvent<{ value: string }>) => {\n setOwnerId(event.target.value as any);\n };\n\n const handleChangeAssignee = (event: React.ChangeEvent<{ value: string }>) => {\n setAssigneeId(event.target.value as any);\n };\n\n useEffect(() => performSearch(), [ownerId, assigneeId]);\n\n const performSearch = () => {\n if (setAreAllTasksVisible) {\n setAreAllTasksVisible(false);\n }\n httpClient\n .get(`tasks/${name}`, {\n params: {\n CreatorId: ownerId,\n AssigneeId: assigneeId\n }\n })\n .then(({ data }) => {\n const tasks = mapResponseToTasks(data, name);\n setData(tasks);\n })\n .catch(console.error);\n };\n\n const handleSwitch = (e: React.MouseEvent) => {\n setChecked(!checked);\n if (setAreAllTasksVisible) {\n setAreAllTasksVisible(false);\n }\n setOwnerId('');\n setAssigneeId('');\n if (checked) {\n httpClient\n .get(`tasks/${name}`)\n .then(({ data }) => {\n let tasks = mapResponseToTasks(data, name);\n setData(tasks);\n })\n .catch(console.error);\n }\n };\n\n return (\n \n );\n};\n\nfunction mapResponseToTasks(data: any, name: string) {\n let tasks = { ...data };\n if (name == 'mainboard') {\n const keys = Object.keys(data);\n tasks = { ...data };\n for (let key of keys) {\n tasks[key] = data[key].tasks.map((t: any) => ({ ...t, columnId: tasks[key].id }));\n }\n }\n return tasks;\n}\n","import React, {useEffect, useState} from 'react';\nimport {Theme} from '@mui/material/styles';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport AppBar from '@mui/material/AppBar';\nimport Toolbar from '@mui/material/Toolbar';\nimport IconButton from '@mui/material/IconButton';\nimport MenuItem from '@mui/material/MenuItem';\nimport Menu from '@mui/material/Menu';\nimport AccountCircle from '@mui/icons-material/AccountCircle';\nimport MoreIcon from '@mui/icons-material/MoreVert';\nimport Logo from '../assets/logo.svg';\nimport {Redirect} from 'react-router-dom';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport {StyledButton} from './styledButton';\nimport {FilterTasksContainer, IFilterTasksContainerProps} from '../containers/filterTasksContainer';\nimport {authenticationService} from '../services/AuthenticationService';\nimport {useStore} from '../state/store';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n grow: {\n flexGrow: 1\n },\n menuButton: {\n marginRight: theme.spacing(2)\n },\n logo: {\n maxWidth: 160,\n paddingTop: '1em',\n paddingBottom: '1em'\n },\n sectionDesktop: {\n display: 'none',\n [theme.breakpoints.up('md')]: {\n display: 'flex'\n }\n },\n sectionMobile: {\n display: 'flex',\n [theme.breakpoints.up('md')]: {\n display: 'none'\n }\n },\n fullScreenButton: {\n '&:hover': {\n backgroundColor: 'inherit'\n }\n }\n })\n);\n\ninterface INavbarProps {\n filteringData?: IFilterTasksContainerProps;\n basicHeaderOnly?: boolean\n}\n\nexport const NavBar: React.FC = ({filteringData, basicHeaderOnly = false}) => {\n const classes = useStyles();\n const user = useStore(state => state.user);\n const [anchorEl, setAnchorEl] = useState(null);\n const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = useState(null);\n const [userName, setUserName] = useState('');\n const [hasLoggedOut, setHasLoggedOut] = useState(false);\n const [userIsAdmin, setUserIsAdmin] = useState(false);\n const [openUserManagement, setOpenUserManagement] = useState(false);\n const [openProfileSettings, setOpenProfileSettings] = useState(false);\n\n const isMenuOpen = Boolean(anchorEl);\n const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);\n\n const handleProfileMenuOpen = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleOpenProfileSettings = (event: React.MouseEvent) => {\n setOpenProfileSettings(true);\n };\n\n const handleMobileMenuClose = () => {\n setMobileMoreAnchorEl(null);\n };\n\n const handleMenuClose = () => {\n setAnchorEl(null);\n handleMobileMenuClose();\n };\n\n const handleMobileMenuOpen = (event: React.MouseEvent) => {\n setMobileMoreAnchorEl(event.currentTarget);\n };\n\n const handleLogout = (): void => {\n authenticationService.Logout().then(() => {\n setHasLoggedOut(true);\n });\n handleMenuClose();\n };\n\n const handleUserManagement = (): void => {\n setOpenUserManagement(true);\n handleMenuClose();\n };\n\n const handleFullScreen = () => {\n var elem = document.getElementById('root');\n if (elem != null) {\n if (elem.requestFullscreen) {\n elem.requestFullscreen();\n }\n }\n };\n\n useEffect((): void => {\n authenticationService.IsAdmin().then(isAdmin => {\n setUserIsAdmin(isAdmin);\n })\n }, []);\n\n useEffect(() => {\n if ((user?.firstName?.trim() ?? \"\") !== \"\" || (user?.lastName?.trim() ?? \"\") !== \"\") {\n setUserName(`${user.firstName} ${user.lastName}`);\n }\n }, []);\n \n const menuId = 'primary-search-account-menu';\n const renderMenu = (\n \n Profil\n {userIsAdmin ? Benutzerverwaltung : ''}\n Logout\n \n );\n\n const mobileMenuId = 'primary-search-account-menu-mobile';\n const renderMobileMenu = (\n \n \n \n \n \n

Profil

\n
\n \n );\n\n if (openUserManagement) {\n return \n }\n\n if (openProfileSettings) {\n return \n }\n\n if (hasLoggedOut) {\n return \n }\n\n if (basicHeaderOnly) {\n return (\n
\n \n \n \n \"logo\"\n \n \n \n
\n )\n }\n\n return (\n
\n \n \n \n \"logo\"\n \n
\n {filteringData && (\n \n )}\n
\n \n \n   Vollbildmodus\n \n \n {userName}\n
\n \n \n \n
\n
\n \n \n \n
\n
\n
\n {renderMobileMenu}\n {renderMenu}\n
\n );\n};\n","import React, {FormEvent, useEffect, useState} from 'react';\nimport {authenticationService} from '../services/AuthenticationService';\nimport {Redirect} from \"react-router-dom\";\nimport {Alert, Container, CssBaseline, FormControl, FormHelperText, TextField, Theme} from \"@mui/material\";\nimport {StyledButton} from './styledButton';\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {NavBar} from './navbar';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n saveButton: {\n marginTop: \"1rem\",\n color: 'white',\n background: theme.palette.primary.main,\n '&:hover': {\n background: theme.palette.secondary.main,\n color: 'white'\n }\n }\n })\n);\n\nexport const Login = () => {\n const classes = useStyles();\n const login = authenticationService.useLogin();\n const isLoggedIn = authenticationService.useIsLoggedIn();\n const [userName, setUserName] = useState(null);\n const [password, setPassword] = useState(null);\n const [status, setStatus] = useState(\"loading\");\n const [errors, setErrors] = useState([]);\n\n useEffect(() => {\n const checkAuthentication = async () => {\n const userIsLoggedIn = (await isLoggedIn()).isLoggedIn;\n setStatus(userIsLoggedIn ? \"loggedIn\" : \"\");\n };\n\n checkAuthentication();\n }, []);\n\n const handleLoginSubmit = (evt: FormEvent) => {\n evt.preventDefault();\n setStatus('submitting');\n try {\n login(userName ?? \"\", password ?? \"\").then(response => {\n if (response.succeeded) {\n setStatus('success');\n } else {\n setStatus('');\n setErrors(response.errors);\n }\n });\n } catch (e: any) {\n setStatus('typing');\n console.error(e);\n }\n }\n\n const renderAlert = () => {\n if (!errors.length) {\n return;\n }\n\n return (\n \n {errors.length === 1 ?\n errors[0]\n :\n
    \n {errors.map((error, index) =>
  • {error}
  • )}\n
\n }\n\n
\n )\n }\n\n if (status === 'loading') {\n return
Loading...
\n }\n\n if (['success', 'loggedIn'].includes(status)) {\n return \n }\n\n return (\n \n \n \n \n {renderAlert()}\n {status === \"typing\" &&
Benutzer nicht gefunden
}\n\n
handleLoginSubmit(e)}>\n \n Benutzername *\n setUserName(e.target.value)}\n />\n \n \n Passwort *\n setPassword(e.target.value)}\n />\n \n\n \n Anmelden\n \n \n
\n
\n );\n}\n\nexport default Login;","import React, {useEffect} from 'react';\nimport {useAxios} from '../utils/httpClient';\nimport {useHistory} from 'react-router-dom';\n\nexport const ProfileCheck = () => {\n const httpClient = useAxios(true);\n\n let history = useHistory();\n\n useEffect(() => {\n httpClient\n .put('users/profile')\n .then(({data}) => {\n const redirectUrl = data ? '/profile-settings' : '/board';\n history.push(redirectUrl);\n })\n .catch(console.error);\n }, []);\n\n return
Checking user profile.
;\n};\n","import * as React from 'react';\nimport {useEffect, useState} from 'react';\nimport type {RouteProps} from 'react-router-dom';\nimport {Redirect, Route, RouteComponentProps} from 'react-router-dom';\nimport {authenticationService} from '../services/AuthenticationService';\n\ninterface PrivateRouteParams extends RouteProps {\n component: React.ComponentType> | React.ComponentType;\n}\n\nexport const PrivateRoute = ({component: Component, ...rest}: PrivateRouteParams) => {\n const isLoggedIn = authenticationService.useIsLoggedIn();\n const [isAuthenticated, setIsAuthenticated] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const checkAuthentication = async () => {\n setIsAuthenticated((await isLoggedIn()).isLoggedIn);\n setIsLoading(false);\n };\n\n checkAuthentication();\n }, []);\n\n if (isLoading) {\n return
Loading...
; // Oder eine andere Ladeanzeige\n }\n\n return (\n \n isAuthenticated ? (\n \n ) : (\n \n )\n }\n />\n );\n}\n\nexport function AdminRoute({component: Component, ...rest}: PrivateRouteParams) {\n const [isAdmin, setIsAdmin] = useState(false);\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n const checkAuthentication = async () => {\n setIsLoading(true);\n const isAdmin = await authenticationService.IsAdmin();\n setIsAdmin(isAdmin);\n setIsLoading(false);\n };\n\n checkAuthentication();\n }, []);\n\n if (isLoading) {\n return
Loading...
; // Oder eine andere Ladeanzeige\n }\n\n return (\n \n isAdmin ? (\n \n ) : (\n \n )\n }\n />\n );\n}\n","// Source: https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color\nexport const adjustBrightness = function (bgColor: string) {\n if (bgColor === null) return '#FFFFFF';\n\n const color = bgColor.charAt(0) === '#' ? bgColor.substring(1, 7) : bgColor;\n const r = parseInt(color.substring(0, 2), 16);\n const g = parseInt(color.substring(2, 4), 16);\n const b = parseInt(color.substring(4, 6), 16);\n\n const uicolors = [r / 255, g / 255, b / 255];\n const c = uicolors.map(col => {\n if (col <= 0.03928) {\n return col / 12.92;\n }\n return Math.pow((col + 0.055) / 1.055, 2.4);\n });\n const L = 0.2126 * c[0] + 0.7152 * c[1] + 0.0722 * c[2];\n return L > 0.179 ? 'black' : 'white';\n};\n","declare global {\n interface Date {\n ConvertToYearMonthDayString(): string;\n }\n}\n\nDate.prototype.ConvertToYearMonthDayString = function (): string {\n return this.getFullYear() + '-' + ('0' + (this.getMonth() + 1)).slice(-2) + '-' + ('0' + this.getDate()).slice(-2);\n};\n\nexport {};\n","import React from 'react';\nimport { Backdrop, CircularProgress } from '@mui/material';\n\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles({\n buttonProgress: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n marginTop: -12,\n marginLeft: -12\n },\n backdrop: {\n zIndex: 2,\n color: '#fff',\n display: 'flex',\n flexDirection: 'column',\n '& div': {\n marginBottom: '2em'\n }\n }\n});\n\nexport const LoadingSpinner = () => {\n const classes = useStyles();\n\n return (\n \n \n \n );\n};\n","import { BoardUserSummaryResponse, TaskStatus } from './board';\n\nexport interface IBoardTask {\n id: number;\n title: string;\n effort: number;\n status: TaskStatus;\n toDoDate: Date;\n creator: BoardUserSummaryResponse;\n assignee: BoardUserSummaryResponse;\n tags?: string[];\n columnId?: number;\n}\n\nexport interface ITaskDetails {\n id?: number;\n title: string;\n tododate: string;\n creatorId: any;\n assigneeId: any;\n effort: number;\n description: string;\n tags?: string[];\n}\n\nexport const ValidTaskEfforts = {\n fifteenMinutes: '0.25',\n halfHour: '0.5',\n oneHour: '1',\n twoHours: '2',\n threeHours: '3',\n fourHours: '4',\n fiveHours: '5',\n other: '0'\n};\n","import React, {FocusEvent, KeyboardEvent, useEffect, useState} from 'react';\nimport AddIcon from '@mui/icons-material/Add';\nimport {Autocomplete, Chip, MenuItem, Select, TextField} from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport {Theme} from '@mui/material/styles';\n\nimport makeStyles from '@mui/styles/makeStyles';\nimport {TagsForAutocomplete} from '../types/tags';\nimport {authenticationService} from '../services/AuthenticationService';\n\ninterface ITaskFormTagsParams {\n tags: string[];\n onClick: () => void;\n showTagInput: boolean;\n onBlur: (e: FocusEvent) => void;\n onKeyPress: (e: KeyboardEvent) => void;\n handleTagRemoval: (tag: string) => void;\n tagsForAutocomplete: TagsForAutocomplete | undefined;\n addTagFromAutocomplete: (tag: string) => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n row: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center'\n },\n list: {\n listStyle: 'none',\n paddingLeft: 0\n },\n listItem: {\n marginTop: 0\n },\n chip: {\n margin: theme.spacing(0.5)\n }\n })\n);\n\nexport const TaskFormTags = (props: ITaskFormTagsParams) => {\n const classes = useStyles();\n const [isAdmin, setIsAdmin] = useState(false);\n\n useEffect(() => {\n let isMounted = true;\n\n const checkIsAdmin = async () => {\n const isAdmin = await authenticationService.IsAdmin();\n\n if (isMounted) {\n setIsAdmin(isAdmin);\n }\n };\n\n checkIsAdmin();\n\n return () => {\n isMounted = false;\n }\n }, []);\n\n function renderTagSelector() {\n if (isAdmin)\n return (\n {\n if (newValue !== null) props.addTagFromAutocomplete(newValue.label);\n }}\n renderInput={params => }\n />\n );\n else\n return (\n props.addTagFromAutocomplete(e.target.value as string)}\n >\n {props.tagsForAutocomplete?.map(tag => (\n \n {tag.label}\n \n ))}\n \n );\n }\n\n return (\n
\n
    \n {props.tags.map((tag, idx) => (\n
  • \n props.handleTagRemoval(tag)} className={classes.chip}/>\n
  • \n ))}\n
\n \n {props.showTagInput && renderTagSelector()}\n
\n );\n}\n","import React, { FocusEvent, KeyboardEvent } from 'react';\nimport AddIcon from '@mui/icons-material/Add';\nimport { Chip, TextField } from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport { Theme } from '@mui/material/styles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Link } from 'react-router-dom';\n\ninterface ITaskFormLinksParams {\n links: string[];\n onClick: () => void;\n showLinkInput: boolean;\n onBlur: (e: FocusEvent) => void;\n onKeyPress: (e: KeyboardEvent) => void;\n handleLinkRemoval: (link: string) => void;\n}\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n container: {\n padding: '5px'\n },\n row: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n alignItems: 'center'\n },\n list: {\n listStyle: 'none',\n paddingLeft: 0\n },\n listItem: {\n marginTop: 0\n },\n chip: {\n margin: theme.spacing(0.5)\n }\n })\n);\n\nexport function TaskFormLinks(props: ITaskFormLinksParams) {\n const classes = useStyles();\n return (\n
\n
\n Links\n
\n
\n
    \n {props.links.map((link, idx) => (\n
  • \n \n {link}\n \n }\n onDelete={_ => props.handleLinkRemoval(link)}\n className={classes.chip}\n />\n
  • \n ))}\n
\n \n {props.showLinkInput && }\n
\n
\n );\n}\n","import React from 'react';\nimport {FormControl, FormHelperText, MenuItem, TextField} from \"@mui/material\";\nimport {ValidTaskEfforts} from \"../types/tasks\";\n\ninterface ITaskFormEffortProps {\n classes: Record<\"row\" | \"inputElement\" | \"saveButton\", string>,\n effortInForm: string,\n handleFormEffortChange: (e: any) => void,\n effortInModel: number,\n handleModelEffortChange: (e: any) => void\n}\n\nexport function TaskFormEffort(props: ITaskFormEffortProps) {\n return <>\n \n Arbeitszeit\n \n 15 Minuten\n 30 Minuten\n 1 Stunde\n 2 Stunden\n 3 Stunden\n 4 Stunden\n 5 Stunden\n Andere (in Stunden)\n
\n \n {props.effortInForm === ValidTaskEfforts.other && (\n \n Arbeitsstunden\n \n \n )}\n ;\n}","import React, {ChangeEvent, useEffect, useState} from 'react';\nimport {\n Alert,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControl,\n FormHelperText,\n MenuItem,\n Select,\n SelectChangeEvent,\n TextField,\n Theme\n} from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport {LoadingSpinner} from './loadingSpinner';\nimport {ITaskDetails, ValidTaskEfforts} from '../types/tasks';\nimport {TaskFormTags} from './taskFormTags';\nimport {TaskFormLinks} from './taskFormLinks';\nimport {StyledButton} from './styledButton';\nimport {TagsForAutocomplete} from '../types/tags';\nimport {TaskFormEffort} from \"./taskFormEffort\";\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n inputElement: {\n overflow: 'hidden',\n padding: '5px',\n margin: '8px 0 8px 0'\n },\n saveButton: {\n color: 'white',\n background: theme.palette.primary.main,\n '&:hover': {\n background: theme.palette.secondary.main,\n color: 'white'\n }\n },\n row: {\n display: 'flex',\n flexDirection: 'row'\n }\n })\n);\n\ninterface IAlerts {\n alertRequired: boolean;\n alertDate: boolean;\n alertEffort: boolean;\n alertTitleLength: boolean;\n}\n\ninterface IDialogNewTaskProps {\n isOpen: boolean;\n isLoading: boolean;\n handleClose: () => void;\n task: ITaskDetails;\n alerts: IAlerts;\n fieldDate: string;\n creators: any[];\n assignees: any[];\n handleChangeMenu: (\n event: SelectChangeEvent<{ value: unknown } | ChangeEvent>,\n prop: keyof ITaskDetails\n ) => void;\n handleChangeEffort: (event: SelectChangeEvent<{ value: unknown }> | ChangeEvent) => void;\n handleSubmit: (e: React.MouseEvent) => void;\n handleChange: (event: React.ChangeEvent, prop: keyof ITaskDetails) => void;\n handleChangeDate: (event: React.ChangeEvent, prop: keyof ITaskDetails) => void;\n tags: string[];\n addNewTag: (tag: string) => void;\n removeTag: (tag: string) => void;\n links: string[];\n addNewLink: (links: string) => void;\n handleRemovedLink: (links: string) => void;\n tagsForAutocomplete: TagsForAutocomplete | undefined;\n}\n\nconst errorMessages = {\n alertRequired: 'Bitte füllen Sie die Pflichtfelder(*) aus.',\n alertDate: 'To Do Datum sollte größer oder gleich dem heutigen Datum sein.',\n alertEffort: 'Arbeitsstunden sollte positiv sein.',\n alertTitleLength: 'The minimum length of title is 3 characters.'\n};\n\nfunction getAlertMessage(alerts: IAlerts): string | null {\n if (alerts.alertRequired) {\n return errorMessages.alertRequired;\n }\n if (alerts.alertDate) {\n return errorMessages.alertDate;\n }\n\n if (alerts.alertEffort) {\n return errorMessages.alertEffort;\n }\n\n if (alerts.alertTitleLength) {\n return errorMessages.alertTitleLength;\n }\n\n return null;\n}\n\n\nexport const DialogNewTask: React.FC = ({\n isOpen,\n task,\n handleClose,\n isLoading,\n alerts,\n fieldDate,\n creators,\n assignees,\n handleChangeMenu,\n handleChangeEffort,\n handleSubmit,\n handleChange,\n handleChangeDate,\n tags,\n addNewTag,\n removeTag,\n links,\n addNewLink,\n handleRemovedLink,\n tagsForAutocomplete\n }) => {\n const classes = useStyles();\n const [dateForDisplay, setDateForDisplay] = useState('');\n\n useEffect(() => {\n const date = fieldDate?.split('T')[0];\n setDateForDisplay(date);\n }, [fieldDate]);\n\n const [showTagInput, setShowTagInput] = useState(false);\n const [showLinksInput, setShowLinksInput] = useState(false);\n const [effortInForm, setEffortInForm] = useState(task.effort + '');\n\n useEffect(() => {\n const {id} = task;\n const effort = task.effort.toString();\n\n if (id && effortInForm === '-1') {\n if (Object.values(ValidTaskEfforts).includes(effort)) {\n setEffortInForm(effort);\n } else setEffortInForm(ValidTaskEfforts.other);\n }\n }, [task, setEffortInForm, effortInForm]);\n\n if (isLoading) {\n return ;\n }\n\n function ShowAlert(): JSX.Element {\n const alertMessage = getAlertMessage(alerts);\n return (\n
\n {alertMessage && (\n \n {alertMessage}\n \n )}\n
\n );\n }\n\n function handleNewTag(value: string) {\n addNewTag(value);\n setShowTagInput(false);\n }\n\n function handleNewLink(value: string) {\n addNewLink(value);\n setShowLinksInput(false);\n }\n\n function handleKeyPressForTask(e: React.KeyboardEvent) {\n if (e.key === 'Enter') {\n const target = e.target as any;\n handleNewTag(target.value);\n }\n }\n\n function handleKeyPressForLink(e: React.KeyboardEvent) {\n if (e.key === 'Enter') {\n const target = e.target as any;\n handleNewLink(target.value);\n }\n }\n\n function handleFormEffortChange(e: SelectChangeEvent<{ value: unknown }> | ChangeEvent) {\n const {value} = e.target;\n setEffortInForm(value as string);\n handleChangeEffort(e);\n }\n\n return (\n \n \n {task.id === undefined ? Neue Aufgabe erstellen : {`Aufgabe ${task.id}`}}\n \n \n setShowTagInput(true)}\n showTagInput={showTagInput}\n onBlur={e => handleNewTag(e.target.value)}\n onKeyPress={e => handleKeyPressForTask(e)}\n handleTagRemoval={removeTag}\n addTagFromAutocomplete={v => handleNewTag(v)}\n tagsForAutocomplete={tagsForAutocomplete}\n />\n \n Titel *\n handleChange(e, 'title')}\n />\n \n\n
\n \n To Do Datum *\n handleChangeDate(e, 'tododate')}\n />\n \n handleFormEffortChange(e)}\n effortInModel={task.effort} handleModelEffortChange={e => handleChangeEffort(e)}/>\n
\n \n Inhaber\n \n \n \n Bearbeiter\n handleChangeMenu(e, 'assigneeId')}\n >\n {assignees.map(assignee => (\n \n {assignee.firstName} {assignee.lastName}\n \n ))}\n \n \n\n \n Beschreibung\n handleChange(e, 'description')}\n />\n \n\n setShowLinksInput(true)}\n showLinkInput={showLinksInput}\n onBlur={e => handleNewLink(e.target.value)}\n onKeyPress={e => handleKeyPressForLink(e)}\n handleLinkRemoval={handleRemovedLink}\n />\n \n
\n \n \n Abbrechen\n \n handleSubmit(e)}>\n Speichern\n \n \n
\n );\n};\n","import { ITasks, IBoardSection } from './board';\nimport { IBoardTask } from './tasks';\n\nexport interface IInitialData {\n tasks: ITasks;\n columns: {\n [columnId: string]: IBoardSection;\n };\n columnOrder: string[];\n}\n\nexport enum ColumnIds {\n today = 'today',\n tomorrow = 'tomorrow',\n inProgress = 'inProgress',\n review = 'review',\n toBeFinished = 'toBeFinished',\n done = 'done'\n}\n\nexport interface IMainBoard {\n today: IBoardTask[];\n tomorrow: IBoardTask[];\n inProgress: IBoardTask[];\n review: IBoardTask[];\n toBeFinished: IBoardTask[];\n}\n\ninterface IBoardTaskDto {\n id: string;\n type: number;\n tasks: IBoardTask[];\n}\n\nexport interface IMainBoardDto {\n [key: string]: IBoardTaskDto;\n}\n","import { ColumnIds } from '../types/mainBoard';\nimport { ITaskDetails } from '../types/tasks';\n\nexport function checkErrorsInForm(task: ITaskDetails, today: number): boolean {\n return checkRequiredFields(task) || checkIfEffortIsInvalid(task) || checkTitleLength(task);\n}\n\nexport function checkIfEffortIsInvalid(task: ITaskDetails): boolean {\n return task.effort < -1;\n}\n\nexport function checkDateTodayOrLater(today: number, selectedDateNoTime: number): boolean {\n return today > selectedDateNoTime;\n}\n\nexport function checkRequiredFields(task: ITaskDetails): boolean {\n const defaultDate = '2000-01-01';\n return task.title === '' || task.tododate === defaultDate;\n}\n\nexport function checkTitleLength(task: ITaskDetails): boolean {\n return task.title.length < 3;\n}\n\nexport function getInitialDate(columnId: string | undefined): string {\n const today = new Date();\n today.setHours(0, 0, 0, 0);\n\n if (!columnId) return '';\n\n if (columnId == ColumnIds.tomorrow) {\n today.setDate(today.getDate() + 1);\n }\n\n return today.ConvertToYearMonthDayString();\n}\n","export type GetTagsResponse = { items: [{ label: string }] };\n\nexport const GET_TAGS_ROUTE = 'tags';\n\nexport type TagsForAutocomplete = [{ label: string }];\n","import { IBoardTask } from './tasks';\n\nexport interface ITask {\n id: string;\n title: string;\n owner: string;\n assigneePicture: string;\n ownerPicture: string;\n}\n\nexport interface ITasks {\n [taskId: string]: ITask;\n}\n\nexport interface IBoardSection {\n id: string;\n title: string;\n tasks: IBoardTask[];\n type: TaskStatus;\n isDropDisabled: (type: string) => boolean;\n}\n\nexport enum TaskStatus {\n backlog = 1,\n inProgress = 2,\n review = 3,\n toBeFinished = 4,\n done = 5\n}\n\nexport interface BoardUserSummaryResponse {\n id: string;\n firstName: string;\n lastName: string;\n profileImage: string;\n color: string;\n}\n\nexport enum ColumnNames {\n tomorrow = 'Morgen',\n today = 'Heute',\n inProgress = 'In Arbeit',\n review = 'Review',\n toBeFinished = 'Fertigstellung',\n done = 'Done'\n}","import React, { ChangeEvent, useEffect, useState } from 'react';\nimport { useAxios } from '../utils/httpClient';\nimport { Guid } from 'guid-typescript';\nimport '../extensions/date';\nimport { ITaskDetails } from '../types/tasks';\nimport { DialogNewTask } from '../components/dialogNewTask';\nimport {\n checkDateTodayOrLater,\n checkErrorsInForm,\n checkIfEffortIsInvalid,\n checkRequiredFields,\n checkTitleLength,\n getInitialDate\n} from '../utils/taskValidators';\nimport { SelectChangeEvent } from '@mui/material';\nimport { GET_TAGS_ROUTE, GetTagsResponse, TagsForAutocomplete } from '../types/tags';\n\ninterface IDialogNewTaskProps {\n isOpen: boolean;\n columnId?: string;\n closeSelf: () => void;\n taskId?: number;\n}\n\nexport const CreateTaskContainer: React.FC = ({ isOpen, columnId, closeSelf, taskId }) => {\n const httpClient = useAxios();\n\n const initialToDoDate = getInitialDate(columnId);\n const [task, setTask] = useState({\n title: '',\n tododate: initialToDoDate,\n creatorId: Guid.createEmpty().toString,\n assigneeId: Guid.createEmpty().toString,\n effort: -1,\n description: ''\n });\n const [tags, setTags] = useState([]);\n const [links, setLinks] = useState([]);\n\n const [fieldDate, setFieldDate] = useState(task.tododate);\n const [alertRequired, setAlertRequired] = React.useState(false);\n const [alertDate, setAlertDate] = React.useState(false);\n const [alertEffort, setAlertEffort] = React.useState(false);\n const [alertTitleLength, setAlertTitleLength] = React.useState(false);\n const [creators, setCreators] = useState>([]);\n const [assignees, setAssignees] = useState>([]);\n const [loading, setLoading] = React.useState(false);\n const [existingTags, setExistingTags] = useState();\n\n useEffect(() => {\n if (taskId) {\n httpClient\n .get(`tasks/${taskId}`)\n .then(res => {\n const taskFromApi = res.data;\n setTask(taskFromApi);\n setFieldDate(taskFromApi.toDoDate);\n setTags(taskFromApi?.tags);\n setLinks(taskFromApi?.links);\n })\n .catch(console.error);\n }\n\n httpClient\n .get(GET_TAGS_ROUTE)\n .then(res => {\n const labels = res.data.items;\n setExistingTags(labels);\n })\n .catch(console.error);\n }, [taskId]);\n\n const handleChange = (event: React.ChangeEvent, prop: keyof ITaskDetails) => {\n setTask({ ...task, [prop]: event.target.value });\n };\n\n const handleChangeDate = (event: React.ChangeEvent, prop: keyof ITaskDetails) => {\n setTask({ ...task, [prop]: event.target.value });\n setFieldDate(event.target.value);\n };\n\n const handleChangeEffort = (event: SelectChangeEvent<{ value: unknown }> | ChangeEvent) => {\n const { value } = event.target;\n const effort = parseFloat(value as string).toFixed(2);\n\n setTask({ ...task, effort: parseFloat(effort) });\n };\n\n const handleChangeMenu = (\n event: SelectChangeEvent<{ value: unknown } | ChangeEvent>,\n prop: keyof ITaskDetails\n ) => {\n setTask({ ...task, [prop]: event.target.value });\n };\n\n const emptyFields = () => {\n setTask({\n title: '',\n tododate: initialToDoDate,\n creatorId: Guid.createEmpty().toString,\n assigneeId: Guid.createEmpty().toString,\n effort: 0,\n description: ''\n });\n setFieldDate(task.tododate);\n };\n\n // Get assignees\n useEffect(() => {\n httpClient.get('users/profile').then(res => {\n const users = res.data.items;\n setAssignees(users);\n setCreators(users);\n });\n }, []);\n\n const handleClose = () => {\n emptyFields();\n setLoading(false);\n clearAlerts();\n closeSelf();\n };\n\n const clearAlerts = () => {\n setAlertRequired(false);\n setAlertDate(false);\n setAlertEffort(false);\n setAlertTitleLength(false);\n };\n\n const handleSubmit = async (e: React.MouseEvent) => {\n clearAlerts();\n e.preventDefault();\n\n const today = new Date().setHours(0, 0, 0, 0);\n const selectedDate = new Date(task.tododate);\n const selectedDateNoTime = selectedDate.setHours(0, 0, 0, 0);\n\n if (checkErrorsInForm(task, today)) {\n if (checkRequiredFields(task)) {\n setAlertRequired(true);\n }\n if (checkIfEffortIsInvalid(task)) {\n setAlertEffort(true);\n }\n if (checkTitleLength(task)) {\n setAlertTitleLength(true);\n }\n } else {\n if (checkDateTodayOrLater(today, selectedDateNoTime) && taskId == null) {\n setAlertDate(true);\n } else {\n setLoading(true);\n const taskDto: ITaskDetails & { tags: string[]; links: string[] } = { ...task, tags, links };\n \n if (taskDto.effort == -1) taskDto.effort = 0;\n\n try {\n if (taskId == null) {\n await httpClient.post('tasks', taskDto);\n } else {\n await httpClient.put(`tasks/${taskId}`, taskDto);\n }\n } finally {\n handleClose();\n }\n }\n }\n };\n\n const appendTag = (tag: string) => {\n if (tag != '' && tags.indexOf(tag) < 0) {\n setTags([...tags, tag]);\n }\n };\n\n const removeTag = (tagToRemove: string): void => {\n setTags(tags => tags.filter(tag => tag !== tagToRemove));\n };\n\n const addLink = (link: string) => {\n if (!/\\S/.test(link)) {\n return;\n }\n if (!link.startsWith('http')) link = `https://${link}`;\n setLinks([...links, link]);\n };\n\n const removeLink = (linkToRemove: string): void => {\n setLinks(links => links.filter(link => link !== linkToRemove));\n };\n\n return (\n \n );\n};\n","import { BoxProps } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport React, { useEffect, useState } from 'react';\nimport { adjustBrightness } from '../utils/assignColors';\nimport { serverUrl, useAxios } from '../utils/httpClient';\nimport Avatar from '../assets/avatar.jpg';\nimport { IBoardTask } from '../types/tasks';\nimport { CreateTaskContainer } from '../containers/createTaskContainer';\nimport { ColumnNames } from '../types/board';\n\ninterface IStyleProps {\n isDragging: boolean;\n task: IBoardTask;\n columnTitle: string;\n passedDate: boolean;\n}\n\ninterface ICardProps {\n isDragging: boolean;\n task: IBoardTask;\n columnTitle: string;\n}\n\nconst useStyles = makeStyles({\n container: {\n width: '100%',\n boxSizing: 'border-box',\n overflow: 'hidden',\n padding: '0.6em 1.2em',\n marginBottom: '10px',\n backgroundColor: (props: IStyleProps) => (props.isDragging ? '#fcfcfc' : 'white'),\n boxShadow: (props: IStyleProps) =>\n props.passedDate && props.columnTitle !== 'done' ? '2px 3px 2px rgb(230 50 50)' : '1px 1px 1px rgb(9 30 66 / 25%)',\n borderRadius: '6px',\n display: 'flex',\n flexDirection: 'row'\n },\n column: {\n display: 'flex',\n flexDirection: 'column',\n '&:first-of-type': {\n flexGrow: 2\n },\n '&:last-of-type': {\n justifyContent: 'space-between',\n alignItems: 'flex-end'\n }\n },\n row: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n marginBottom: '5px'\n },\n titleRow: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n marginBottom: '5px'\n },\n taskId: {\n fontSize: '0.8rem',\n color: '#828282'\n },\n title: {\n fontSize: '1.2rem',\n fontWeight: 700,\n textAlign: 'start',\n color: '#727272'\n },\n ownerName: {\n fontSize: '0.9rem',\n backgroundColor: (props: IStyleProps) => props.task.creator.color ?? '#000000',\n color: (props: IStyleProps) => adjustBrightness(props.task.creator.color),\n padding: '0.3em 1.4em 0.3em 0.8em',\n borderRadius: '8px',\n boxShadow: '9px 9px 9px -10px rgb(150 150 150)'\n },\n picture: {\n minWidth: '35px',\n width: '45px',\n height: '45px',\n borderRadius: '50%'\n },\n tagsContainer: {\n display: 'flex',\n flexDirection: 'row',\n flexWrap: 'wrap',\n listStyle: 'none',\n paddingLeft: 0\n },\n tag: {\n backgroundColor: '#3F00D5',\n margin: '0 0.5em 0.3em 0',\n padding: '0.3em 0.5em',\n borderRadius: '6px',\n color: '#FFFFFF',\n fontWeight: 400,\n boxShadow: '9px 9px 9px -10px rgb(150 150 150)'\n }\n});\n\nexport const Card = (props: ICardProps & Omit) => {\n const { columnTitle, task, isDragging, ...other } = props;\n\n let passedDate = false;\n const today = new Date();\n const toDoDate = new Date(task.toDoDate);\n if (today.getTime() > toDoDate.getTime()) {\n passedDate = true;\n }\n if (today.getDay() === toDoDate.getDay() && today.getMonth() === toDoDate.getMonth() && today.getFullYear() === toDoDate.getFullYear()) {\n passedDate = false;\n }\n\n const styleProps = { isDragging, task, columnTitle, passedDate };\n const classes = useStyles(styleProps);\n\n // eslint-disable-next-line eqeqeq\n const isDateVisilbe = columnTitle != ColumnNames.today && columnTitle != ColumnNames.tomorrow && columnTitle != ColumnNames.inProgress;\n const isAssigneeMissing = task.assignee.firstName === null;\n const isTagsListVisible = task.tags && task.tags.length !== 0;\n\n const [isTaskModalOpen, setIsTaskModalOpen] = useState(false);\n const handleOpen = () => setIsTaskModalOpen(true);\n const handleClose = () => setIsTaskModalOpen(false);\n\n function showAvatarForAssignee() {\n return task.assignee.profileImage === '' ? (\n
{`${task.assignee.firstName} ${task.assignee.lastName}`}
\n ) : (\n \n );\n }\n\n function showTagsList(tags: string[]) {\n return (\n
    \n {tags.map(t => (\n
  • \n {t}\n
  • \n ))}\n
\n );\n }\n\n function showEffort() {\n const effort = task.effort;\n\n if (effort < 1) {\n const effortInMinutes = 60 * effort;\n return `${effortInMinutes} min`;\n }\n return `${effort} std`;\n }\n\n return (\n <>\n
\n
\n
\n
{task.title}
\n
\n
\n
\n
\n
{`${task.creator.firstName} ${task.creator.lastName}`}
\n
\n {isDateVisilbe && (\n
\n
\n {task.toDoDate.toString().substring(8, 10)}.{task.toDoDate.toString().substring(5, 7)}.\n {task.toDoDate.toString().substring(0, 4)}\n
\n
\n )}\n
\n
\n {isTagsListVisible && showTagsList(task.tags as string[])}\n
\n
\n
{showEffort()}
\n {isAssigneeMissing ? {`no : showAvatarForAssignee()}\n
\n
\n {isTaskModalOpen && }\n \n );\n};\n\nexport default Card;\n","export default \"data:image/jpeg;base64,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QWFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABWJ4t0s6v4bu7dBmVV8yMDuy8gfj0/GtuinCTi1JdBSSaaPnSiuj8caE2ia9I0aYtrkmSIgcD1X8CfyIrnK+npTVSCktmeNKLjJp9AooorQkKKKKACiiigAooooAK2fCGlnV/EtpAVzGjebL6bV5/U4H41jV6t8N9CNhpTahOmJ7vlc9RH2/M8/TFcuMreypvu9EbUKfPNdjtaKKK+dPWCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAMfxLoMXiHSXtnwsq/NFIR91v8K8Su7Sawupba4jMc0bbWU/56d6+ha5jxf4Qh8Q2/nQbYr+MfJIejj+63t79q78FivZPlls/wObEUedXW543RU95Z3Gn3T213C0UyH5lYf5yD61BXuJpq6PNatowooopiCiiigAoore8MeE7vxFcggNFZqf3kxH6L6n+Xf0qJzjTTlJ2SKjFydluS+DPDD+INTEkqkWMBBlY9GP90e/8h+FeyqqooVQAoGAB2qvp2nW2l2cdrZxiOFBgAfzPqferdfPYnEOvO/ToepRpKmrdQooornNgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiq95e29hAZ7ueOGJerO2BQk27ITdixRXA6j8UraC6EdhZtcxA/NIzbM/QY/U4+ldToniGw12282zmBdR88bcOn1H9RxWs8PUglKS0IjVhJ2TDW/Dun69b+XfRAsB8ki8On0P9Dx7V5zrPw31OxLPYEXkOcgL8rj6g9fwz9BXrXWlq6OKqUvhenYVSjCe6Pnme1ntJDFcwyQyDqsilSPzqKvoeWCKdCk0SSKequAR+tZ7+GtGkOW0uyz6iBQf5V3RzNW96JzPB9meEVoadoOpasQLGymlUnG8DC/99HivbIdC0u2YNBp1nGw6FYVB/PFXsUp5m7e7EI4Puzz7QfhkkTLPrUokI5FvEcL/AMCbv9Bj6mu9ggitoUhgjWONBhVUYAFS0V51WtOq7yZ1wpxgtEFFcf4i+INlpEpt7NReXAPzbXwifU9z7CptC8faZrG2OZhZ3J/5Zyn5T9G6fng+1V9XqcvPZ2F7aHNy31OqooorE0CiiigAooooAKKKKACiiigAooooAKKKKACiimTTRwRNJM6xooyzMcAD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\"","import React from 'react';\nimport { IBoardTask } from '../types/tasks';\nimport { Draggable } from 'react-beautiful-dnd';\nimport Card from './card';\n\ninterface TaskProps {\n task: IBoardTask;\n index: number;\n columnTitle: string;\n}\n\nconst Task: React.FC = ({ task, index, columnTitle }) => {\n return (\n \n {(provided, snapshot) => (\n
\n \n
\n )}\n
\n );\n};\n\nexport default Task;\n","import React, { useState } from 'react';\nimport { Icon, IconButton, Theme, Typography } from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { CreateTaskContainer } from '../containers/createTaskContainer';\n\ninterface ITitle {\n title: string;\n columnId: string;\n}\n\nconst useStylesTitle = makeStyles((theme: Theme) =>\n createStyles({\n titleContainer: {\n height: '30px',\n display: 'flex',\n backgroundColor: theme.palette.primary.main,\n alignItems: 'center',\n justifyContent: 'flex-start',\n borderTopLeftRadius: '6px',\n borderTopRightRadius: '6px',\n position: 'sticky',\n top: 0\n },\n circle: {\n minwidth: '20px',\n width: '20px',\n height: '20px',\n marginLeft: '7px'\n },\n title: {\n padding: '5px',\n fontWeight: 500,\n color: 'white',\n textAlign: 'center',\n fontSize: '1.3em',\n marginLeft: 'auto',\n marginRight: 'auto'\n },\n plus: {\n color: 'white',\n borderRadius: '50%',\n marginLeft: 'auto'\n }\n })\n);\n\nexport function ColumnTitle(props: ITitle) {\n const classes = useStylesTitle(props);\n const [isTaskModalOpen, setIsTaskModalOpen] = useState(false);\n\n const handleOpen = () => setIsTaskModalOpen(true);\n const handleClose = () => setIsTaskModalOpen(false);\n\n const isAddVisible: boolean = props.title === 'Morgen' || props.title === 'Heute';\n\n return <>\n
\n
\n \n {props.title}\n \n {isAddVisible && (\n \n add_circle\n \n )}\n
\n {isTaskModalOpen && }\n ;\n}\n","import React from 'react';\nimport { styled } from '@mui/material/styles';\nimport { Droppable } from 'react-beautiful-dnd';\nimport Task from './task';\nimport { IBoardSection } from '../types/board';\nimport { Box, BoxProps } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { ColumnTitle } from './columnTitle';\n\ninterface IStyleProps {\n isActive: boolean;\n}\n\nexport interface ColumnProps {\n key: string;\n column: IBoardSection;\n isDropDisabled: boolean;\n}\n\nconst Container = styled(Box)({\n margin: '0.5em',\n width: '20%',\n flexDirection: 'column',\n overflow: 'auto',\n backgroundColor: '#EdEdF3',\n '&::-webkit-scrollbar': {\n display: 'none'\n },\n scrollbarWidth: 'none',\n msOverflowStyle: 'none'\n});\n\nconst useStylesListContainer = makeStyles({\n listContainer: {\n padding: '8px',\n backgroundColor: (props: IStyleProps) => (props.isActive ? '#cecece' : '#EBECF0'),\n flexGrow: 1,\n minHeight: '100px'\n }\n});\n\nfunction TaskList(props: IStyleProps & Omit) {\n const { isActive, children } = props;\n const classes = useStylesListContainer(props);\n return
{children}
;\n}\n\nexport const Column: React.FC = ({ column, isDropDisabled }) => {\n return (\n \n \n \n {(provided, snapshot) => (\n
\n \n {column.tasks?.map((task, idx) => (\n \n ))}\n {provided.placeholder}\n \n
\n )}\n
\n
\n );\n};\n","import React from 'react';\nimport { Box, BoxProps, styled, Theme } from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Droppable } from 'react-beautiful-dnd';\nimport { IBoardSection } from '../types/board';\nimport { useStore } from '../state/store';\n\ninterface IStyleProps {\n isActive: boolean;\n name: string;\n isVisible: boolean;\n}\n\nconst useStylesListContainer = makeStyles((theme: Theme) => {\n return createStyles({\n listContainer: {\n padding: '8px',\n backgroundColor: (props: IStyleProps) => (props.isActive ? '#ddd' : props.isVisible ? '#eee' : 'inherit'),\n border: `4px ${theme.palette.primary.main}`,\n borderStyle: (props: IStyleProps) => (props.isActive ? 'solid' : ''),\n borderSpacing: '2',\n flexGrow: 1,\n minHeight: (props: IStyleProps) => (props.isActive ? '20px' : '20px'),\n borderRadius: '2px'\n }\n });\n});\n\nfunction DropArea(props: IStyleProps & Omit) {\n const { name, isVisible } = props;\n const classes = useStylesListContainer(props);\n return
{isVisible && name}
;\n}\n\nconst Container = styled(Box)(({ theme }) => ({\n display: 'flex',\n margin: '0',\n height: '100%',\n width: '100%',\n fontSize: '1.5em',\n textAlign: 'center',\n color: theme.palette.primary.main\n}));\n\nexport const DroppableArea = ({ section, isDropDisabled, name }: { section: IBoardSection; isDropDisabled: boolean; name: string }) => {\n const isVisible = useStore(state => state.isDropAreaVisible);\n return (\n \n \n {(provided, snapshot) => (\n
\n \n
\n )}\n
\n
\n );\n};\n","import React from 'react';\nimport { Fab } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport AddIcon from '@mui/icons-material/Add';\nimport { CreateTaskContainer } from '../containers/createTaskContainer';\nimport { StyledButton } from './styledButton';\n\nconst useStyles = makeStyles({\n root: {\n position: 'absolute',\n left: '30px',\n top: '150px'\n }\n});\n\nexport const NewTask = () => {\n const classes = useStyles();\n\n const [open, setOpen] = React.useState(false);\n\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n return (\n
\n \n \n \n {open && handleClose()} />}\n
\n );\n};\n","import React from 'react';\nimport { Theme } from '@mui/material';\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Link, useLocation } from 'react-router-dom';\nimport DashboardIcon from '@mui/icons-material/Dashboard';\nimport BookIcon from '@mui/icons-material/Book';\nimport AssignmentTurnedInIcon from '@mui/icons-material/AssignmentTurnedIn';\nimport { NewTask } from './newTask';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n root: {\n margin: '0',\n padding: '0',\n flexGrow: 1,\n border: 0,\n display: 'flex',\n flexDirection: 'column',\n width: '60px'\n },\n tab: {\n display: 'flex',\n justifyContent: 'center',\n padding: '5px',\n margin: '10px 0 10px 0',\n fontSize: '2em',\n fontWeight: 'bold',\n background: 'white',\n color: '#eee'\n },\n active: {\n background: 'white',\n color: theme.palette.primary.main,\n '&:hover': {\n color: theme.palette.secondary.main\n }\n },\n link: {\n background: 'white',\n color: '#aaa',\n '&:hover': {\n color: theme.palette.primary.main\n }\n },\n newTask: {}\n })\n);\n\nexport const StateViewSelector = () => {\n const classes = useStyles();\n const { pathname } = useLocation();\n return (\n
\n
\n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n \n \n \n
\n
\n );\n};\n","import makeStyles from '@mui/styles/makeStyles';\nimport React from 'react';\nimport { IBoardSection } from '../types/board';\nimport { DroppableArea } from './dropArea';\nimport { StateViewSelector } from './stateViewSelector';\nimport { NavBar } from './navbar';\n\ninterface IBoardLayoutProps {\n isDropDisabled?: boolean;\n section?: IBoardSection;\n dropName?: string;\n name: string;\n setData: any;\n setAreAllTasksVisible?: any;\n}\n\nconst useStyles = makeStyles({\n globalRoot: {\n maxHeight: '100vh',\n height: '100vh',\n display: 'flex',\n flexDirection: 'column'\n },\n container: {\n display: 'flex',\n flexDirection: 'row',\n backgroundColor: '#F6F6F6',\n height: '100%',\n overflowY: 'hidden',\n width: '100vw'\n },\n left: {\n display: 'flex',\n backgroundColor: 'white',\n alignItems: 'center',\n justifyContent: 'center'\n },\n right: {\n display: 'flex',\n flexDirection: 'column',\n padding: '0.5em 3em',\n boxSizing: 'border-box',\n width: 'calc(100vw - 60px)'\n },\n columnSmall: {\n flexDirection: 'row',\n maxWidth: '100%',\n flexWrap: 'wrap',\n boxSizing: 'border-box',\n justifyContent: 'flex-end',\n alignContent: 'flex-end',\n marginLeft: 'auto',\n padding: '0.5em',\n backgroundColor: '#F6F6F6',\n width: '50%',\n display: 'flex'\n }\n});\n\nexport const BoardLayout: React.FC = ({\n children,\n section,\n isDropDisabled = true,\n dropName = '',\n name,\n setData,\n setAreAllTasksVisible = false\n}) => {\n const classes = useStyles();\n\n return (\n
\n \n
\n
\n \n
\n
\n
\n {section && }\n
\n {children}\n
\n
\n
\n );\n};\n","import React from 'react';\nimport { Box, styled } from '@mui/material';\nimport { BoardLayout } from './boardLayout';\nimport { IBoardSection } from '../types/board';\n\nconst Container = styled(Box)({\n display: 'flex',\n justifyContent: 'space-between',\n overflowY: 'auto'\n});\n\ninterface IMainBoardProps {\n isDoneDisabled: boolean;\n lastColumn: IBoardSection;\n columns: JSX.Element[];\n setData: any;\n}\n\nexport const MainBoard: React.FC = ({ isDoneDisabled, lastColumn, columns, setData }) => {\n return (\n \n {columns}\n \n );\n};\n","import {HubConnection, HubConnectionBuilder, LogLevel} from '@microsoft/signalr';\nimport {useEffect, useState} from 'react';\n\nfunction buildConnection() {\n return new HubConnectionBuilder()\n .withUrl(`${process.env.REACT_APP_API_URL}/api/v1/hubs/notifications`)\n .configureLogging(LogLevel.Warning)\n .withAutomaticReconnect()\n .build();\n}\n\nexport function useRealtimeConnection(): HubConnection | null {\n const [connection, setConnection] = useState(null);\n\n useEffect(() => {\n connection?.stop();\n\n const newConnection = buildConnection();\n setConnection(newConnection);\n\n startConnection(newConnection);\n newConnection.onclose(() => startConnection(newConnection));\n }, []);\n\n return connection;\n}\n\nasync function startConnection(newConnection: HubConnection) {\n try {\n await newConnection.start();\n console.log('SignalR Connected.');\n } catch (err) {\n console.error(err);\n setTimeout(() => startConnection(newConnection), 5000);\n }\n}\n","import React, { createContext, useContext } from 'react';\nimport { useRealtimeConnection } from '../hooks/useRealtimeConnection';\nimport { IRealTimeState } from '../types/realtime';\n\nconst RealTimeStateContext = createContext({\n onUpdate: Function,\n clear: Function\n} as IRealTimeState);\n\nexport const RealTimeProvider: React.FC<{}> = ({ children }) => {\n const connection = useRealtimeConnection();\n\n const handleNotification = (updateHandler: Function) => connection?.on('refreshBoard', () => updateHandler() as any);\n\n const clearNotificationHandler = () => connection?.off('refreshBoard');\n\n return (\n \n {children}\n \n );\n};\n\nexport const useRealtimeClient = () => useContext(RealTimeStateContext);\n","import React, {useEffect, useState} from 'react';\nimport {DragDropContext, DraggableLocation, DragStart, DropResult} from 'react-beautiful-dnd';\nimport {Column} from '../components/column';\nimport {useAxios} from '../utils/httpClient';\nimport {useStore} from '../state/store';\nimport {IBoardSection, TaskStatus} from '../types/board';\nimport {createColumnsForBoard} from '../utils/mappers/mainBoardToColumns';\nimport {ColumnIds, IMainBoard, IMainBoardDto} from '../types/mainBoard';\nimport {AxiosInstance} from 'axios';\nimport {MainBoard} from '../components/mainBoard';\nimport {useRealtimeClient} from '../state/realtime.context';\nimport {IBoardTask} from '../types/tasks';\n\nfunction moveCardToNewColumn(\n originColumn: IBoardSection | undefined,\n source: DraggableLocation,\n destinationColumn: IBoardSection | undefined,\n destinationIndex: number\n) {\n const task = originColumn?.tasks[source.index];\n originColumn?.tasks.splice(source.index, 1);\n\n if (task && destinationColumn) {\n destinationColumn.tasks.splice(destinationIndex, 0, task);\n }\n}\n\nfunction isDestinationSameAsSource(destination: DraggableLocation, source: DraggableLocation): boolean {\n return destination.droppableId === source.droppableId && destination.index === source.index;\n}\n\nfunction fetchTasks(httpClient: AxiosInstance, setMainBoard: (mainBoard: IMainBoard) => void, ownerId?: string, assigneeId?: string) {\n httpClient\n .get('tasks/mainboard', {\n params: {\n CreatorId: ownerId,\n AssigneeId: assigneeId\n }\n })\n .then(({data}) => {\n const keys = Object.keys(data);\n const tasks: any = {...data};\n for (let key of keys) {\n tasks[key] = data[key].tasks.map(t => ({...t, columnId: tasks[key].id}));\n }\n setMainBoard(tasks);\n })\n .catch(console.error);\n}\n\nfunction updateTaskStatus(\n httpClient: AxiosInstance,\n taskId: string,\n newStatus: TaskStatus,\n previousTaskId?: number | null,\n nextTaskId?: number | null\n) {\n return httpClient.patch(`tasks/${taskId}`, {\n inputState: newStatus,\n previousTaskId,\n nextTaskId\n });\n}\n\nfunction moveIsFromTomorrowToToday(originColumn: IBoardSection | undefined, destinationColumn: IBoardSection): boolean {\n return originColumn?.id == ColumnIds.tomorrow && destinationColumn.id == ColumnIds.today;\n}\n\nfunction moveIsFromTodayToTomorrow(destinationColumn: IBoardSection, originColumn: IBoardSection | undefined) {\n return originColumn?.id == ColumnIds.today && destinationColumn.id == ColumnIds.tomorrow;\n}\n\nfunction handleInColumnOrdering(\n destinationColumn: IBoardSection | undefined,\n destination: DraggableLocation,\n source: DraggableLocation,\n httpClient: AxiosInstance,\n task: IBoardTask | undefined\n) {\n const amountOfTasks = (destinationColumn?.tasks.length ?? 0) - 1;\n\n const previousTaskId = getPreviousTask();\n\n const nextTaskId = getNextTask();\n\n httpClient.patch('/column-orderings', {\n taskId: task?.id,\n previousTaskId,\n nextTaskId,\n columnId: task?.columnId\n });\n\n function getNextTask() {\n let nextTaskIndex = destination.index > source.index ? destination.index + 1 : destination.index;\n if (destination.index == amountOfTasks) nextTaskIndex = -1;\n else if (destination.index == 0) nextTaskIndex = destination.index;\n\n const nextTaskId = nextTaskIndex >= 0 ? destinationColumn?.tasks[nextTaskIndex].id : null;\n return nextTaskId;\n }\n\n function getPreviousTask() {\n let previousTaskIndex = destination.index > source.index ? destination.index : destination.index - 1;\n\n if (destination.index == 0) previousTaskIndex = -1;\n else if (destination.index == amountOfTasks) previousTaskIndex = destination.index;\n const previousTaskId = previousTaskIndex >= 0 ? destinationColumn?.tasks[previousTaskIndex].id : null;\n return previousTaskId;\n }\n}\n\nexport const BoardContainer = () => {\n const httpClient = useAxios();\n const setMainBoard = useStore(state => state.setMainBoard);\n const setIsDropAreaVisible = useStore(state => state.setIsDropAreaVisible);\n const [dragOrigin, setDragOrigin] = useState('');\n const realtimeClient = useRealtimeClient();\n const {ownerId, assigneeId} = useStore(state => ({ownerId: state.ownerId, assigneeId: state.assigneeId}));\n const user = useStore(state => state.user);\n\n useEffect(() => {\n const updateHandler = () => fetchTasks(httpClient, setMainBoard, ownerId, assigneeId);\n\n realtimeClient.onUpdate(updateHandler);\n\n return () => realtimeClient.clear();\n }, [ownerId, assigneeId]);\n\n useEffect(() => {\n fetchTasks(httpClient, setMainBoard);\n }, []);\n\n const mainBoard = useStore(state => state.mainBoard);\n\n const columns: IBoardSection[] = createColumnsForBoard(mainBoard);\n\n const onDragEnd = (result: DropResult) => {\n const {destination, source, draggableId} = result;\n\n if (source.droppableId === ColumnIds.toBeFinished) {\n setIsDropAreaVisible(false);\n }\n\n if (!destination || isDestinationSameAsSource(destination, source)) return;\n\n const originColumn = columns.find(c => c.id == source.droppableId);\n const destinationColumn = columns.find(c => c.id == destination.droppableId);\n\n const task = originColumn?.tasks[source.index];\n\n // Reordering in list\n if (!destinationColumn || originColumn?.id === destinationColumn?.id) {\n handleInColumnOrdering(destinationColumn, destination, source, httpClient, task);\n moveCardToNewColumn(originColumn, source, destinationColumn, destination.index);\n return;\n }\n\n const previousTaskId = destination.index > 0 ? destinationColumn?.tasks[destination.index - 1].id : null;\n const nextTaskId = destination.index < (destinationColumn?.tasks.length ?? 0) ? destinationColumn?.tasks[destination.index].id : null;\n\n if (moveIsFromTodayToTomorrow(destinationColumn, originColumn) || moveIsFromTomorrowToToday(originColumn, destinationColumn)) {\n if (user.id !== task?.creator.id) return;\n }\n\n updateTaskStatus(httpClient, draggableId, destinationColumn.type, previousTaskId, nextTaskId);\n\n moveCardToNewColumn(originColumn, source, destinationColumn, destination.index);\n };\n\n const onDragStart = (start: DragStart) => {\n if (start.source.droppableId === ColumnIds.toBeFinished) {\n setIsDropAreaVisible(true);\n }\n const origin = start.source.droppableId;\n setDragOrigin(origin);\n };\n\n const columnElements = columns.slice(0, columns.length - 1).map(column => {\n return ;\n });\n\n const lastColumn = columns[columns.length - 1];\n const isDoneDisabled = lastColumn.isDropDisabled(dragOrigin);\n\n return (\n
\n onDragEnd(r)} onDragStart={r => onDragStart(r)}>\n \n \n
\n );\n};\n","import { ColumnNames, IBoardSection, TaskStatus } from '../../types/board';\nimport { ColumnIds, IMainBoard } from '../../types/mainBoard';\n\nexport function createColumnsForBoard(mainBoard: IMainBoard): IBoardSection[] {\n return [\n {\n id: ColumnIds.tomorrow,\n title: ColumnNames.tomorrow,\n tasks: mainBoard?.tomorrow,\n type: TaskStatus.backlog,\n isDropDisabled: (source: string) => source !== ColumnIds.today && source !== ColumnIds.tomorrow\n },\n {\n id: ColumnIds.today,\n title: ColumnNames.today,\n tasks: mainBoard?.today,\n type: TaskStatus.backlog,\n isDropDisabled: (source: string) => source !== ColumnIds.tomorrow && source !== ColumnIds.today\n },\n {\n id: ColumnIds.inProgress,\n title: ColumnNames.inProgress,\n tasks: mainBoard?.inProgress,\n type: TaskStatus.inProgress,\n isDropDisabled: (source: string) =>\n source !== ColumnIds.tomorrow && source !== ColumnIds.today && source !== ColumnIds.review && source !== ColumnIds.inProgress\n },\n {\n id: ColumnIds.review,\n title: ColumnNames.review,\n tasks: mainBoard?.review,\n type: TaskStatus.review,\n isDropDisabled: (source: string) => source !== ColumnIds.inProgress && source !== ColumnIds.review\n },\n {\n id: ColumnIds.toBeFinished,\n title: ColumnNames.toBeFinished,\n tasks: mainBoard?.toBeFinished,\n type: TaskStatus.toBeFinished,\n isDropDisabled: (source: string) => source !== ColumnIds.review && source !== ColumnIds.toBeFinished && source !== ColumnIds.inProgress\n },\n {\n id: ColumnIds.done,\n title: ColumnNames.done,\n tasks: [],\n type: TaskStatus.done,\n isDropDisabled: (source: string) => source !== ColumnIds.toBeFinished\n }\n ];\n}\n","import React from 'react';\nimport Card from './card';\nimport { Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { BoardLayout } from './boardLayout';\nimport { IDone } from '../types/done';\n\nconst useStyles = makeStyles({\n container: {\n overflow: 'auto',\n border: '1px solid lightgrey',\n borderRadius: '5px',\n padding: '5px',\n margin: '8px',\n backgroundColor: '#EBECF0'\n },\n row: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'flex-start',\n flexWrap: 'wrap',\n marginBottom: '5px'\n },\n item: {\n margin: '5px',\n width: '17%'\n },\n button: {\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n margin: '5px'\n }\n});\n\ninterface IDoneProps {\n done: IDone;\n showButton: boolean;\n getAllTasks: () => void;\n setData: any;\n setAreAllTasksVisible: any;\n}\n\nexport const Done: React.FC = ({ done, showButton, getAllTasks, setData, setAreAllTasksVisible }) => {\n const classes = useStyles();\n\n return (\n \n
\n
\n {done?.items?.map(task => (\n
\n \n
\n ))}\n
\n
\n
\n {showButton && (\n \n )}\n
\n
\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useAxios } from '../utils/httpClient';\nimport { useStore } from '../state/store';\nimport { useRealtimeClient } from '../state/realtime.context';\nimport { Done } from '../components/done';\nimport { AxiosInstance } from 'axios';\nimport { IDone } from '../types/done';\n\nfunction fetchTasks(\n httpClient: AxiosInstance,\n setDone: (done: IDone) => void,\n shouldGetAll = false,\n ownerId?: string,\n assigneeId?: string\n) {\n httpClient\n .get('tasks/completed', {\n params: {\n All: shouldGetAll,\n CreatorId: ownerId,\n AssigneeId: assigneeId\n }\n })\n .then(res => setDone(res.data));\n}\n\nexport const DoneContainer = () => {\n const httpClient = useAxios();\n const setDone = useStore(state => state.setDone);\n const done = useStore(state => state.done);\n const [areAllTasksVisible, setAreAllTasksVisible] = useState(false);\n const realtime = useRealtimeClient();\n const { ownerId, assigneeId } = useStore(state => ({ ownerId: state.ownerId, assigneeId: state.assigneeId }));\n\n useEffect(() => {\n fetchTasks(httpClient, setDone);\n }, []);\n\n useEffect(() => {\n const handleUpdate = () => {\n fetchTasks(httpClient, setDone, areAllTasksVisible, ownerId, assigneeId);\n };\n\n realtime.onUpdate(handleUpdate);\n\n return () => realtime.clear();\n }, [areAllTasksVisible, httpClient, ownerId, assigneeId]);\n\n const getAllTasks = () => {\n fetchTasks(httpClient, setDone, true, ownerId, assigneeId);\n setAreAllTasksVisible(true);\n };\n\n return (\n <>\n \n \n );\n};\n","import { IBoardTask } from './tasks';\n\nexport enum WeekSectionIds {\n currentWeek = 'currentWeek',\n nextWeek = 'nextWeek',\n restWeeksTasks = 'restWeeksTasks',\n inProgress = 'inProgress'\n}\n\nexport interface IBacklogEffort {\n totalEffort: number;\n}\n\nexport interface IBacklog {\n currentWeek: IBoardTask[];\n nextWeek: IBoardTask[];\n restWeeksTasks: IBoardTask[];\n totalEffort: IBacklogEffort;\n}\n","import React from 'react';\nimport { Box, styled } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Typography from '@mui/material/Typography';\nimport { BoardLayout } from './boardLayout';\nimport { IBoardSection } from '../types/board';\nimport { IBacklogEffort } from '../types/backlog';\nimport { FilterTasksContainer } from '../containers/filterTasksContainer';\n\nconst Container = styled(Box)({\n display: 'flex',\n justifyContent: 'center',\n overflowY: 'auto'\n});\n\nconst useStyles = makeStyles({\n effort: {\n margin: '8px 16px 8px 16px',\n fontWeight: 'bold',\n fontSize: '1.3em'\n }\n});\n\ninterface IBacklogProps {\n isInProgressDisabled: boolean;\n lastSection: IBoardSection;\n totalEffort: IBacklogEffort;\n sectionElements: JSX.Element[];\n setData: any;\n}\n\nexport const Backlog: React.FC = ({ isInProgressDisabled, lastSection, totalEffort, sectionElements, setData }) => {\n const classes = useStyles();\n\n return (\n \n Gesamtaufwand: {totalEffort}\n {sectionElements}\n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { useAxios } from '../utils/httpClient';\nimport { useStore } from '../state/store';\nimport { IBacklog } from '../types/backlog';\nimport { IBoardSection } from '../types/board';\nimport { createWeekSectionsForBacklog } from '../utils/mappers/backlogToWeekSections';\nimport { DragDropContext, DraggableLocation, DragStart, DropResult } from 'react-beautiful-dnd';\nimport { useRealtimeClient } from '../state/realtime.context';\nimport { Backlog } from '../components/backlog';\nimport { AxiosInstance } from 'axios';\nimport { Column } from '../components/column';\n\nfunction moveCardToNewSection(\n originSection: IBoardSection | undefined,\n source: DraggableLocation,\n destinationSection: IBoardSection | undefined\n) {\n const task = originSection?.tasks[source.index];\n originSection?.tasks.splice(source.index, 1);\n\n if (task && destinationSection) {\n destinationSection.tasks.push(task);\n }\n}\n\nfunction isDestinationSameAsSource(destination: DraggableLocation, source: DraggableLocation): boolean {\n return destination.droppableId === source.droppableId && destination.index === source.index;\n}\n\nfunction getTasks(httpClient: AxiosInstance, setBacklog: (backlog: IBacklog) => void, ownerId?: string, assigneeId?: string) {\n httpClient\n .get('tasks/backlog', {\n params: {\n CreatorId: ownerId,\n AssigneeId: assigneeId\n }\n })\n .then(r => {\n setBacklog(r.data);\n })\n .catch(console.error);\n}\n\nexport const BacklogContainer = () => {\n const httpClient = useAxios();\n const setBacklog = useStore(state => state.setBacklog);\n const setIsDropAreaVisible = useStore(state => state.setIsDropAreaVisible);\n const [dragOrigin, setDragOrigin] = useState('');\n const realtimeConnection = useRealtimeClient();\n const { ownerId, assigneeId } = useStore(state => ({ ownerId: state.ownerId, assigneeId: state.assigneeId }));\n\n useEffect(() => {\n getTasks(httpClient, setBacklog);\n\n const handleUpdate = () => getTasks(httpClient, setBacklog, ownerId, assigneeId);\n\n realtimeConnection.onUpdate(handleUpdate);\n\n return () => realtimeConnection.clear();\n }, [ownerId, assigneeId]);\n\n const backlog = useStore(state => state.backlog);\n\n const sections: IBoardSection[] = createWeekSectionsForBacklog(backlog);\n\n const onDragEnd = (result: DropResult) => {\n const { destination, source, draggableId } = result;\n\n setIsDropAreaVisible(false);\n\n if (!destination || isDestinationSameAsSource(destination, source)) return;\n\n const originSection = sections.find(c => c.id == source.droppableId);\n const destinationSection = sections.find(c => c.id == destination.droppableId);\n\n // Reordering in list\n if (!destinationSection || originSection?.id === destinationSection?.id) {\n return;\n }\n\n httpClient\n .patch(`tasks/${draggableId}`, {\n inputState: destinationSection.type\n })\n .catch(err => console.error(err));\n\n moveCardToNewSection(originSection, source, destinationSection);\n };\n\n const onDragStart = (start: DragStart) => {\n const origin = start.source.droppableId;\n setDragOrigin(origin);\n setIsDropAreaVisible(true);\n };\n\n const sectionElements = sections.slice(0, sections.length - 1).map(section => {\n return ;\n });\n\n const lastSection = sections[sections.length - 1];\n const isInProgressDisabled = lastSection.isDropDisabled(dragOrigin);\n\n return (\n <>\n onDragEnd(r)} onDragStart={r => onDragStart(r)}>\n \n \n \n );\n};\n","import { TaskStatus, IBoardSection } from '../../types/board';\nimport { WeekSectionIds, IBacklog } from '../../types/backlog';\n\nexport function createWeekSectionsForBacklog(backlog: IBacklog): IBoardSection[] {\n return [\n {\n id: WeekSectionIds.currentWeek,\n title: 'Diese Woche',\n tasks: backlog?.currentWeek,\n type: TaskStatus.backlog,\n isDropDisabled: (_: string) => true\n },\n {\n id: WeekSectionIds.nextWeek,\n title: 'Nächste Woche',\n tasks: backlog?.nextWeek,\n type: TaskStatus.backlog,\n isDropDisabled: (_: string) => true\n },\n {\n id: WeekSectionIds.restWeeksTasks,\n title: 'Später',\n tasks: backlog?.restWeeksTasks,\n type: TaskStatus.backlog,\n isDropDisabled: (_: string) => true\n },\n {\n id: WeekSectionIds.inProgress,\n title: 'In Arbeit',\n tasks: [],\n type: TaskStatus.inProgress,\n isDropDisabled: (source: string) =>\n source !== WeekSectionIds.currentWeek && source !== WeekSectionIds.nextWeek && source !== WeekSectionIds.restWeeksTasks\n }\n ];\n}\n","import React from 'react';\nimport { Avatar, Box, Button, Container, Paper, styled, Theme, Typography } from '@mui/material';\n\nimport createStyles from '@mui/styles/createStyles';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n large: {\n width: theme.spacing(18),\n height: theme.spacing(18),\n margin: '0 auto'\n },\n imageContainer: {\n marginTop: theme.spacing(2),\n width: theme.spacing(24),\n height: theme.spacing(24),\n margin: '0 auto'\n }\n })\n);\n\nconst InnerContainer = styled(Paper)(({ theme }) => ({\n marginTop: theme.spacing(2),\n flexDirection: 'column',\n overflow: 'hidden',\n padding: theme.spacing(2),\n textAlign: 'center'\n}));\n\ninterface IUploadAvatarProps {\n handleImageSelect: Function;\n encodedImage: string;\n}\n\nexport const UploadAvatar: React.FC = ({ handleImageSelect, encodedImage }) => {\n const classes = useStyles();\n\n return (\n \n \n \n Bitte laden Sie Ihr Profilbild hoch\n \n \n Datei hochladen\n handleImageSelect(e.target.files)} accept=\".jpg,.jpeg,.png\" />\n \n \n {encodedImage !== '' && }\n \n \n \n );\n};\n","import React from 'react';\nimport { Container, Paper, styled, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { adjustBrightness } from '../utils/assignColors';\n\ninterface IStyleProps {\n color: string;\n}\n\nconst useStyles = makeStyles({\n cell: {\n backgroundColor: (props: IStyleProps) => props.color,\n width: '30px',\n height: '30px',\n border: 'none',\n margin: '1px 2px'\n }\n});\n\nconst InnerContainer = styled(Paper)(({ theme }) => ({\n marginTop: theme.spacing(2),\n flexDirection: 'column',\n overflow: 'hidden',\n padding: theme.spacing(2),\n textAlign: 'center'\n}));\n\ninterface IPickColorProps {\n colors: string[];\n selectColor: Function;\n selectedColor: string;\n}\n\nexport const PickColor: React.FC = ({ colors, selectColor, selectedColor }) => {\n const Cell = (props: IStyleProps) => {\n const classes = useStyles(props);\n return ;\n };\n\n const ColorPalette = () => {\n return (\n
\n {colors.map((color, index) => (\n \n ))}\n
\n );\n };\n\n return (\n \n \n \n Farbe des Namensschilds auswählen\n \n \n
\n Ihr Name wird wie folgt angezeigt:   \n \n name\n \n
\n
\n
\n );\n};\n","const allowedExtensions = /(\\.jpg|\\.jpeg|\\.png)$/i;\n\nexport const validateFileExtension = (file: File): boolean => allowedExtensions.test(file.name);\n\nexport function encodeImageToBase64(image: File, setEncodedImage: Function): void {\n const fileReader = new FileReader();\n fileReader.onloadend = () => setEncodedImage(fileReader.result);\n fileReader.readAsDataURL(image);\n}\n","import {\n Alert,\n Container,\n FormControl,\n FormHelperText,\n Paper,\n styled,\n TextField,\n Theme,\n Typography\n} from '@mui/material';\nimport React, {FormEvent, useState} from \"react\";\nimport makeStyles from \"@mui/styles/makeStyles\";\nimport createStyles from \"@mui/styles/createStyles\";\nimport {StyledButton} from './styledButton';\nimport {authenticationService} from '../services/AuthenticationService';\n\nconst InnerContainer = styled(Paper)(({theme}) => ({\n marginTop: theme.spacing(2),\n flexDirection: 'column',\n overflow: 'hidden',\n padding: theme.spacing(2),\n textAlign: 'center'\n}));\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n formControl: {\n marginTop: \"1rem\"\n },\n button: {\n marginTop: \"1rem\",\n color: 'white',\n background: theme.palette.primary.main,\n '&:hover': {\n background: theme.palette.secondary.main,\n color: 'white'\n }\n },\n errorList: {\n textAlign: \"left\"\n }\n })\n);\n\nexport const ChangePassword = () => {\n const classes = useStyles();\n const [oldPassword, setOldPassword] = useState(\"\");\n const [newPassword, setNewPassword] = useState(\"\");\n const [newPasswordConfirm, setNewPasswordConfirm] = useState(\"\");\n const [status, setStatus] = useState(\"\");\n const [errors, setErrors] = useState([]);\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n setErrors([]);\n setStatus(\"loading\");\n\n authenticationService.ChangePassword(oldPassword, newPassword, newPasswordConfirm).then(response => {\n if (response.succeeded) {\n setStatus(\"success\");\n setOldPassword(\"\");\n setNewPassword(\"\");\n setNewPasswordConfirm(\"\");\n } else {\n setStatus(\"\");\n setErrors(response.errors);\n }\n })\n }\n\n const renderForm = () => {\n return (\n
\n \n Aktuelles Passwort *\n setOldPassword(e.target.value)}\n />\n \n \n Neues Passwort *\n setNewPassword(e.target.value)}\n />\n \n \n Neues Passwort bestätigen *\n setNewPasswordConfirm(e.target.value)}\n />\n \n\n \n Passwort ändern\n \n \n );\n }\n\n const renderSuccessAlert = () => {\n if (status !== \"success\") {\n return;\n }\n\n return (\n \n Das Passwort wurde geändert\n \n );\n }\n\n const renderAlert = () => {\n if (!errors.length) {\n return;\n }\n\n return (\n \n {errors.length === 1 ?\n errors[0]\n :\n
    \n {errors.map((error, index) =>
  • {error}
  • )}\n
\n }\n\n
\n )\n }\n\n return (\n \n \n \n Neues Passwort setzen\n \n {status === \"loading\" ?
processing...
: \"\"}\n {renderSuccessAlert()}\n {renderAlert()}\n {renderForm()}\n
\n
\n );\n}\n\nexport default ChangePassword;","export enum RoleEnum {\n admin = \"Admin\",\n standard = \"Standard\",\n}\n\nexport class Role {\n key: RoleEnum;\n name: string\n\n constructor(key: RoleEnum, name: string) {\n this.key = key;\n this.name = name;\n }\n}\n\nexport function getUserRoles(): Role[] {\n return [\n new Role(RoleEnum.standard, \"Standard\"),\n new Role(RoleEnum.admin, \"Admin\")\n ];\n}","import React, {MouseEvent, useEffect, useState} from 'react';\nimport {Container, Paper, styled, Typography} from '@mui/material';\nimport {useHistory} from 'react-router-dom';\nimport {useSnackbar} from 'notistack';\nimport {UploadAvatar} from './uploadAvatar';\nimport {PickColor} from './pickColor';\nimport {NavBar} from './navbar';\nimport {fileSizeValidator} from '../utils/sizeValidator';\nimport {useAxios} from '../utils/httpClient';\nimport {encodeImageToBase64, validateFileExtension} from '../utils/imageEncoder';\nimport {StyledButton} from './styledButton';\nimport {ChangePassword} from './changePassword';\n\nconst OuterContainer = styled(Container)(({theme}) => ({\n marginTop: theme.spacing(2),\n flexDirection: 'column',\n overflow: 'hidden',\n padding: theme.spacing(2),\n textAlign: 'center'\n}));\n\nconst InnerContainer = styled(Paper)(({theme}) => ({\n marginTop: theme.spacing(2),\n display: 'flex',\n overflow: 'hidden',\n backgroundColor: '#F6F6F6',\n padding: theme.spacing(2),\n textAlign: 'center'\n}));\n\ninterface IProfileSettingsProps {\n handleSettingsUpload: Function;\n selectedColor: string;\n handleColorSelection: Function;\n encodedImage: string;\n handleEncodedImageSet: Function;\n}\n\nexport const ProfileSettings: React.FC = ({\n handleSettingsUpload,\n selectedColor,\n handleColorSelection,\n encodedImage,\n handleEncodedImageSet\n }) => {\n const [colors, setColors] = useState([]);\n const httpClient = useAxios();\n\n useEffect(() => {\n httpClient.get('users/colors/available').then(r => {\n setColors(r.data.items.map((i: any) => i.color));\n });\n }, []);\n\n const selectColor = (e: MouseEvent, color: string) => {\n handleColorSelection(color);\n };\n\n const {enqueueSnackbar} = useSnackbar();\n const history = useHistory();\n\n const createErrorMessage = (message: string) => {\n enqueueSnackbar(message, {\n variant: 'error',\n autoHideDuration: 3000\n });\n };\n\n const handleImageSelect = (files: FileList | null): void => {\n if (files == null) {\n return;\n }\n\n const file = files[0];\n if (!validateFileExtension(file)) {\n createErrorMessage('An image must be provided for the avatar');\n return;\n }\n\n if (!fileSizeValidator(file)) {\n createErrorMessage('An image less than 2MB must be provided for the avatar');\n return;\n }\n\n encodeImageToBase64(file, handleEncodedImageSet);\n };\n\n const uploadSettings = (e: MouseEvent) => {\n e.preventDefault();\n handleSettingsUpload();\n };\n\n return (\n
\n \n \n \n Profileinstellungen\n \n \n \n \n \n \n \n \n \n Beenden\n \n \n
\n );\n};\n","const megabyteInBytes = 1048576;\nconst allowedMegabytes = 2;\n\nexport const fileSizeValidator = (file: File): boolean => file.size <= megabyteInBytes * allowedMegabytes;\n","import React, {useEffect, useState} from 'react';\nimport {useHistory} from 'react-router';\nimport {ProfileSettings} from '../components/profileSettings';\nimport {useAxios} from '../utils/httpClient';\n\nexport const ProfileUpdateContainer = () => {\n const [selectedColor, setSelectedColor] = useState('');\n const [encodedImage, setEncodedImage] = useState('');\n const httpClient = useAxios();\n const history = useHistory();\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n httpClient.get('users/profile/me').then(r => {\n const {color, image} = r.data;\n setSelectedColor(color);\n setIsLoading(false);\n setEncodedImage('data:image/png;base64, ' + image);\n });\n }, []);\n\n const handleSettingsUpload = () => {\n httpClient\n .put('users/profile/media', {\n image: encodedImage.split(',')[1],\n color: selectedColor\n })\n .then(() => history.push('/board'));\n };\n\n if (isLoading) return

Loading...

\n\n return (\n <>\n \n \n );\n};\n","import React, {useState} from 'react';\nimport {useHistory} from 'react-router';\nimport {ProfileSettings} from '../components/profileSettings';\nimport {useAxios} from '../utils/httpClient';\n\nexport const ProfileInitContainer = () => {\n const [selectedColor, setSelectedColor] = useState('');\n const [encodedImage, setEncodedImage] = useState('');\n const httpClient = useAxios();\n const history = useHistory();\n\n const handleSettingsUpload = () => {\n httpClient\n .post('users/profile', {\n image: encodedImage.split(',')[1],\n color: selectedColor\n })\n .then(() => history.push('/board'));\n };\n\n return (\n <>\n \n \n );\n};\n","import {Theme} from \"@mui/material\";\nimport {createStyles, makeStyles} from \"@mui/styles\";\n\nexport const useUserManagementStyles: Function = makeStyles((theme: Theme) =>\n createStyles({\n title: {\n marginTop: '3rem !important',\n marginBottom: '1rem'\n },\n subtitle: {\n marginTop: \"1rem\",\n marginBottom: \".5rem\"\n },\n formControl: {\n marginTop: \"1rem\",\n },\n buttonWrapper: {\n display: \"flex\",\n flexDirection: \"row\",\n flexWrap: \"wrap\",\n justifyContent: \"space-between\"\n },\n primaryButton: {\n marginTop: \"1rem\",\n color: 'white',\n background: theme.palette.primary.main,\n '&:hover': {\n background: theme.palette.secondary.main,\n color: 'white'\n }\n },\n secondaryButton: {\n marginTop: \"1rem\",\n marginRight: \".5rem\",\n color: theme.palette.primary.main\n },\n navButton: {\n marginTop: \"1rem\",\n marginLeft: \".2rem\",\n \":not(:first-child)\": {\n marginRight: \".2rem\"\n },\n padding: \".4rem\",\n width: \"48%\",\n height: \"5rem\",\n color: 'white',\n background: theme.palette.primary.main,\n '&:hover': {\n background: theme.palette.secondary.main,\n color: 'white'\n }\n },\n secondaryNavButton: {\n marginTop: \"1rem\",\n marginLeft: \".2rem\",\n padding: \".4rem\",\n width: \"48%\",\n height: \"5rem\",\n color: theme.palette.primary.main\n },\n readonly: {\n backgroundColor: \"#ddd\",\n }\n })\n);","import React, {useState} from 'react';\nimport {Alert, Container, CssBaseline, Typography} from \"@mui/material\";\nimport {NavBar} from './navbar';\nimport {Redirect} from \"react-router-dom\";\nimport {StyledButton} from './styledButton';\nimport {useUserManagementStyles} from '../utils/stylingHelper'\n\nexport const UserManagement = (props: any) => {\n const classes = useUserManagementStyles();\n const [status, setStatus] = useState(\"\");\n\n const handleNewUser = () => {\n setStatus(\"registerNewUser\");\n }\n\n const handleEditUser = () => {\n setStatus(\"editUser\");\n }\n\n const handleDeleteUser = () => {\n setStatus(\"deleteUser\");\n }\n\n const handleAbort = () => {\n setStatus(\"abort\");\n }\n\n const renderSuccessAlert = () => {\n if (!props?.location?.state?.successMsg)\n return;\n\n return ({props.location.state.successMsg});\n }\n\n if (status === \"abort\") {\n return \n }\n\n if (status === \"registerNewUser\") {\n return \n }\n\n if (status === \"editUser\") {\n return \n }\n\n if (status === \"deleteUser\") {\n return \n }\n\n return (\n \n \n \n \n Adminbereich\n {renderSuccessAlert()}\n
\n Neuen Benutzer anlegen\n Benutzer bearbeiten\n Benutzer entfernen\n Zurück\n
\n
\n
\n );\n}\n\nexport default UserManagement;","import React, {FormEvent, useState} from 'react';\nimport {\n Alert,\n Container,\n CssBaseline,\n FormControl,\n FormHelperText,\n MenuItem,\n Select,\n TextField,\n Typography\n} from \"@mui/material\";\nimport {NavBar} from './navbar';\nimport {authenticationService} from '../services/AuthenticationService';\nimport {Redirect} from \"react-router-dom\";\nimport {StyledButton} from './styledButton';\nimport {getUserRoles} from '../types/role';\nimport {UserModel} from '../types/user';\nimport {useUserManagementStyles} from '../utils/stylingHelper';\n\nexport const RegisterUser = () => {\n const classes = useUserManagementStyles();\n const register = authenticationService.useRegister();\n const [status, setStatus] = useState(\"\");\n const [userName, setUserName] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [password, setPassword] = useState(\"\");\n const [passwordConfirm, setPasswordConfirm] = useState(\"\");\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [role, setRole] = useState(\"\");\n const [errors, setErrors] = useState([]);\n\n // submit event\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n setErrors([]);\n setStatus(\"loading\");\n const newUser: UserModel = {\n userName: userName,\n email: email,\n password: password,\n passwordConfirm: passwordConfirm,\n firstName: firstName,\n lastName: lastName,\n role: role\n }\n register(newUser).then(response => {\n if (response.succeeded) {\n setStatus(\"success\");\n } else {\n setStatus(\"\");\n setErrors(response.errors);\n }\n });\n }\n\n const handleAbort = () => {\n setStatus(\"abort\");\n }\n\n const handleRoleChange = (role: string) => {\n setRole(role);\n }\n\n const renderAlert = () => {\n if (!errors.length) {\n return;\n }\n\n return (\n \n {errors.length === 1 ?\n errors[0]\n :\n
    \n {errors.map((error, index) =>
  • {error}
  • )}\n
\n }\n
\n )\n }\n\n if (status === \"success\") {\n return \n }\n\n if (status === \"abort\") {\n return \n }\n\n return (\n \n \n \n \n Neuer Benutzer\n {renderAlert()}\n
\n \n Benutzername *\n setUserName(e.target.value)}\n />\n \n \n E-Mail *\n setEmail(e.target.value)}\n />\n \n \n Passwort *\n setPassword(e.target.value)}\n />\n \n \n Passwort bestätigen *\n setPasswordConfirm(e.target.value)}\n />\n \n \n Vorname *\n setFirstName(e.target.value)}\n />\n \n \n Nachname *\n setLastName(e.target.value)}\n />\n \n \n Rolle *\n \n \n\n \n Abbrechen\n \n\n \n Registrieren\n \n \n
\n
\n );\n}\n\nexport default RegisterUser;","import {\n Alert,\n Container,\n CssBaseline,\n FormControl,\n FormHelperText,\n MenuItem,\n Select,\n TextField,\n Typography\n} from \"@mui/material\";\nimport React, {FormEvent, useEffect, useState} from \"react\";\nimport {NavBar} from \"./navbar\";\nimport {authenticationService} from \"../services/AuthenticationService\";\nimport {Redirect} from \"react-router-dom\";\nimport {IUser} from \"../types/user\";\nimport {StyledButton} from \"./styledButton\";\nimport {getUserRoles} from \"../types/role\";\nimport {useUserManagementStyles} from \"../utils/stylingHelper\";\n\nexport const EditUser = () => {\n const classes = useUserManagementStyles();\n const edit = authenticationService.useEdit();\n const [status, setStatus] = useState(\"loading\");\n const [users, setUsers] = useState([]);\n const [selectedUser, setSelectedUser] = useState(null);\n const [userName, setUserName] = useState(\"\");\n const [newPassword, setNewPassword] = useState(\"\");\n const [newPasswordConfirm, setNewPasswordConfirm] = useState(\"\");\n const [email, setEmail] = useState(\"\");\n const [firstName, setFirstName] = useState(\"\");\n const [lastName, setLastName] = useState(\"\");\n const [role, setRole] = useState(\"\");\n const [errors, setErrors] = useState([]);\n\n // submit event\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n setErrors([]);\n setStatus(\"loading\");\n const userDto: IUser = {\n id: selectedUser?.id,\n email: email,\n userName: userName,\n password: newPassword,\n passwordConfirm: newPasswordConfirm,\n firstName: firstName,\n lastName: lastName,\n role: role\n }\n\n edit(userDto).then(response => {\n if (response.succeeded) {\n setStatus(\"success\");\n } else {\n setStatus(\"\");\n setErrors(response.errors);\n }\n })\n }\n\n const handleAbort = () => {\n setStatus(\"abort\");\n }\n\n const handleUserChange = (userId: string) => {\n const userFound = users.find(u => u.id === userId);\n if (userFound) {\n setSelectedUser(userFound);\n setUserName(userFound.userName ?? \"\");\n setEmail(userFound.email ?? \"\");\n setFirstName(userFound.firstName ?? \"\");\n setLastName(userFound.lastName ?? \"\");\n setRole(userFound.role ?? \"\");\n }\n }\n\n const handleRoleChange = (role: string) => {\n setRole(role);\n }\n\n const renderSelectUser = () => {\n if (!users.length) {\n return;\n }\n\n return (\n \n Benutzer *\n \n \n )\n }\n\n const renderEditUserForm = () => {\n if (!selectedUser?.id) {\n return (\n \n Abbrechen\n \n );\n }\n\n return (\n
\n
\n \n Benutzername *\n setUserName(e.target.value)}\n />\n \n \n E-Mail *\n setEmail(e.target.value)}\n />\n \n \n Neues Passwort\n setNewPassword(e.target.value)}\n />\n \n \n Neues Passwort bestätigen\n setNewPasswordConfirm(e.target.value)}\n />\n \n \n Vorname *\n setFirstName(e.target.value)}\n />\n \n \n Nachname *\n setLastName(e.target.value)}\n />\n \n \n Rolle *\n \n \n\n \n Abbrechen\n \n\n \n Aktualisieren\n \n \n
\n );\n }\n\n const renderAlert = () => {\n if (!errors.length) {\n return;\n }\n\n return (\n \n {errors.length === 1 ?\n errors[0]\n :\n
    \n {errors.map((error, index) =>
  • {error}
  • )}\n
\n }\n\n
\n )\n }\n\n useEffect((): void => {\n authenticationService.GetAllUsers(false).then(userResponse => {\n setUsers(userResponse.length ? userResponse : []);\n setStatus(\"\");\n });\n }, []);\n\n if (status === \"loading\") {\n return (
loading...
);\n }\n\n if (status === \"success\") {\n return \n }\n\n if (status === \"abort\") {\n return \n }\n\n return (\n \n \n \n \n Bestehenden Benutzer\n bearbeiten\n {renderAlert()}\n {renderSelectUser()}\n {renderEditUserForm()}\n \n \n );\n}\n\nexport default EditUser;","import {Alert, Container, CssBaseline, FormControl, FormHelperText, MenuItem, Select, Typography} from \"@mui/material\";\nimport React, {FormEvent, useEffect, useState} from \"react\";\nimport {authenticationService} from \"../services/AuthenticationService\";\nimport {IUser} from \"../types/user\";\nimport {NavBar} from \"./navbar\";\nimport {StyledButton} from \"./styledButton\";\nimport {Redirect} from \"react-router-dom\";\nimport {useUserManagementStyles} from \"../utils/stylingHelper\";\n\nexport const DeleteUser = () => {\n const classes = useUserManagementStyles();\n const [status, setStatus] = useState(\"loading\");\n const [users, setUsers] = useState([]);\n const [selectedUser, setSelectedUser] = useState({id: \"\", lastName: \"\", firstName: \"\", email: \"\"});\n const [errors, setErrors] = useState([]);\n\n const handleSubmit = (e: FormEvent) => {\n e.preventDefault();\n setErrors([]);\n setStatus(\"loading\");\n\n if (!selectedUser.id)\n return;\n\n authenticationService.Delete(selectedUser.id).then(response => {\n if (response.succeeded) {\n setStatus(\"success\");\n } else {\n setStatus(\"\");\n setErrors(response.errors);\n }\n })\n }\n\n const handleAbort = () => {\n setStatus(\"abort\");\n }\n\n const handleUserChange = (userId: string) => {\n const userFound = users.find(u => u.id === userId) || {id: '', firstName: '', lastName: '', email: ''} as IUser;\n setSelectedUser(userFound);\n }\n\n const renderSelectUser = () => {\n return (\n \n Benutzer *\n \n \n )\n }\n\n const renderAlert = () => {\n if (!errors.length) {\n return;\n }\n\n return (\n \n {errors.length === 1 ?\n errors[0]\n :\n
    \n {errors.map((error, index) =>
  • {error}
  • )}\n
\n }\n\n
\n )\n }\n\n useEffect((): void => {\n authenticationService.GetAllUsers(true).then(userResponse => {\n setUsers(userResponse.length ? userResponse : []);\n setStatus(\"\");\n });\n }, []);\n\n if (status === \"loading\") {\n return (
loading...
);\n }\n\n if (status === \"success\") {\n return \n }\n\n if (status === \"abort\") {\n return \n }\n\n return (\n \n \n \n \n Benutzer löschen\n {renderAlert()}\n
\n {renderSelectUser()}\n \n Abbrechen\n \n\n \n Löschen\n \n \n
\n
\n );\n}\n\nexport default DeleteUser;","import React from 'react';\nimport {BrowserRouter as Router, Redirect, Route, Switch} from 'react-router-dom';\nimport Login from '../components/login';\nimport {ProfileCheck} from '../components/profileCheck';\nimport {AdminRoute, PrivateRoute} from './utils';\nimport {BoardContainer} from '../containers/boardContainer';\nimport {DoneContainer} from '../containers/doneContainer';\nimport {BacklogContainer} from '../containers/backlogContainer';\nimport {ProfileUpdateContainer} from '../containers/profileUpdateContainer';\nimport {ProfileInitContainer} from '../containers/profileInitContainer';\nimport UserManagement from '../components/userManagement';\nimport RegisterUser from '../components/registerUser';\nimport EditUser from '../components/editUser';\nimport DeleteUser from '../components/deleteUser';\n\nexport const AppRouter = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n","import { createTheme, adaptV4Theme } from '@mui/material/styles';\n\nconst theme = createTheme(adaptV4Theme({\n palette: {\n primary: {\n main: '#A5BC19'\n },\n secondary: {\n main: '#7A8A12'\n }\n }\n}));\n\nexport default theme;\n","import React from 'react';\nimport '@atlaskit/css-reset';\nimport {SnackbarProvider} from 'notistack';\nimport {AppRouter} from './routes';\nimport theme from './utils/theme';\nimport {RealTimeProvider} from './state/realtime.context';\nimport {ThemeProvider} from '@mui/material';\nimport {StyledEngineProvider} from '@mui/material/styles';\n\nconst rootUrl = window.location.origin;\n\nfunction App(): JSX.Element {\n return (\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}