frontend/build/static/js/main.993a2e72.chunk.js.map
2020-10-21 18:34:59 +02:00

1 line
64 KiB
Plaintext

{"version":3,"sources":["types/index.ts","contexts/CASProvider.tsx","components/Profile.tsx","contexts/CoursesProvider.tsx","components/Dropdown.tsx","components/Topbar.tsx","components/Transfer.tsx","components/SchedulerRow.tsx","components/SchedulerEvents.tsx","constants/index.ts","components/Scheduler.tsx","webpack:///./src/assets/close.svg?fc23","components/CourseCard.tsx","components/Rightbar.tsx","components/App.tsx","styles/GlobalStyles.ts","index.tsx","assets/transfer.png","assets/search.svg","assets/UK.png","assets/PL.png","assets/user.png","assets/close.svg","assets/expand.png"],"names":["GroupType","CASContext","createContext","undefined","CASProvider","children","useState","user","setUser","useEffect","login","a","urlParams","URLSearchParams","window","location","search","ticket","get","replace","origin","sessionStorage","getItem","axios","process","token","data","setItem","console","log","Provider","value","logout","Profile","anchorEl","handleClose","useContext","Menu","keepMounted","open","Boolean","onClose","MenuItem","onClick","coursesContext","CoursesProvider","courses","setCourses","basket","setBasket","CAS","saveBasket","json","JSON","stringify","json_data","post","headers","Authorization","ech","map","id","name","groups","parseInt","lectures","filter","type","LECTURE","classes","CLASS","sort","b","fetchData","addToBasket","course","courseToBasket","lecture","addGroup","choosenGroup","basketCourse","deleteFromBasket","DropdownStyled","styled","div","CourseStyled","useStyles","makeStyles","topbarInput","marginTop","width","Dropdown","clearInput","handleClearInput","React","setOpen","input","setInput","filteredCourses","setFilteredCourses","choosenCoursesNames","trim","toLowerCase","includes","filterCourses","onCourseClick","event","target","currentTarget","textContent","find","toString","ClickAwayListener","onClickAway","Input","placeholder","inputProps","className","onChange","index","key","TopbarTextStyled","Topbar","TopbarLogoWrapperStyled","TopbarLogoStyled","img","TopbarInputStyled","TopbarInputFieldStyled","TopbarInputIconStyled","TopbarIcon","TopbarIconBox","handleTransfer","setClearInput","isPolish","setIsPolish","setAnchorEl","alt","src","Search","CloseIcon","Transfer","UK","PL","User","wrapper","display","justifyContent","textAlign","alignItems","TransferStyled","TransferGiveStyled","TransferReceiveStyled","TransferTextStyled","TransferInputStyled","isOpen","Modal","aria-labelledby","aria-describedby","Fade","in","theme","createStyles","popover","pointerEvents","paper","padding","spacing","marginLeft","SchedulerEvent","cellTop","cellWidth","eventIndex","cellHeight","Classes","groupType","SchedulerRow","indexRow","popoverId","setPopoverId","handlePopoverClose","Array","_","group","day","aria-owns","aria-haspopup","onMouseEnter","e","onMouseLeave","room","Popover","anchorOrigin","vertical","horizontal","transformOrigin","disableRestoreFocus","Typography","lecturer","SchedulerEvents","choosenGroupsMappedToEvents","setChoosenGroupsMappedToEvents","groupTimeToEventRowMapping","groupsMapped","time","eventRow","mapGroupTimeToEventRow","days","hours","SchedulerWrapper","TableBody","TableRow","TableHead","TableCell","height","Scheduler","table","cellRef","useRef","setCellWidth","setCellTop","wrapperRef","wrapperHeight","setWrapperHeight","handleResize","current","getBoundingClientRect","top","addEventListener","ref","indexCell","hour","_extends","Object","assign","i","arguments","length","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","createElement","d","fill","_ref","svgRef","title","props","viewBox","ForwardRef","forwardRef","CourseNameStyled","ClassGroupStyled","ClassExandIconStyled","isSelected","TypeClass","expanded","maxHeight","overflowY","borderRadius","backgroundColor","outline","DeleteFromBasketIcon","CourseCard","setSelected","Collapse","timeout","unmountOnExit","localeCompare","onGroupClick","ExpandIcon","RightbarStyled","RightbarTextStyled","SaveButton","Alert","elevation","variant","Rightbar","names","getBasketGroups","save","debounce","reason","Snackbar","autoHideDuration","severity","Wrapper","App","isOpenTransfer","setOpenTransfer","GlobalStyles","createGlobalStyle","ReactDOM","render","document","getElementById","module","exports"],"mappings":"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","file":"static/js/main.993a2e72.chunk.js","sourcesContent":["export enum GroupType {\n LECTURE = 'LECTURE',\n CLASS = 'CLASS',\n}\n\nexport interface Basket {\n id: number;\n name: string;\n lecture?: Group;\n classes: Group;\n}\n\nexport interface Group {\n id: number;\n day: number;\n time: string;\n lecturer: string;\n room: string;\n type: GroupType;\n capacity?: number;\n}\n\nexport interface Course {\n id: number;\n name: string;\n lectures?: Array<Group>;\n classes: Array<Group>;\n}\n\nexport interface User {\n name?: string;\n surname?: string;\n token: string | null;\n}\n","import React, { useState, useEffect, createContext, ReactNode } from 'react';\nimport { User } from '../types';\nimport axios from 'axios';\n\nexport interface CASContext {\n user?: User;\n logout: () => void;\n}\n\nexport const CASContext = createContext<CASContext | undefined>(undefined);\n\nexport interface CASProviderProps {\n children: ReactNode;\n}\n\nexport const CASProvider = ({ children }: CASProviderProps) => {\n const [user, setUser] = useState<User | undefined>(undefined);\n useEffect(() => {\n login();\n }, []);\n\n const login = async () => {\n const urlParams = new URLSearchParams(window.location.search);\n const ticket = urlParams.get('ticket');\n if (!ticket) {\n redirectToCASLoginService();\n }\n try {\n if (!sessionStorage.getItem('userToken')) {\n const { data: token } = await axios.get(`${process.env.REACT_APP_API_URL}/token?ticket=${ticket}`);\n sessionStorage.setItem('userToken', token);\n setUser({ ...user, token });\n }\n const token = sessionStorage.getItem('userToken');\n setUser({ ...user, token });\n } catch (e) {\n console.log(e);\n }\n };\n\n function logout() {\n redirectToCASLogoutService();\n }\n\n function redirectToCASLogoutService() {\n window.location.replace(`https://cas.amu.edu.pl/cas/logout?service=${window.origin}`);\n }\n\n function redirectToCASLoginService() {\n window.location.replace(`https://cas.amu.edu.pl/cas/login?service=${window.origin}&locale=pl`);\n }\n\n return <CASContext.Provider value={{ user, logout }}>{children}</CASContext.Provider>;\n};\n","import { Menu, MenuItem } from '@material-ui/core';\nimport React, { useContext } from 'react';\nimport { CASContext } from '../contexts/CASProvider';\n\ninterface ProfileProps {\n anchorEl: HTMLElement | null;\n handleClose: () => void;\n}\n\nexport const Profile = ({ anchorEl, handleClose }: ProfileProps) => {\n const { logout } = useContext(CASContext)!;\n\n return (\n <Menu anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>\n <MenuItem>Profile</MenuItem>\n <MenuItem>My account</MenuItem>\n <MenuItem onClick={logout}>Logout</MenuItem>\n </Menu>\n );\n};\n","import React, { useState, createContext, useEffect, ReactNode, useContext } from 'react';\nimport { Course, Group, Basket, GroupType } from '../types';\nimport axios from 'axios';\nimport { CASContext, CASProvider } from './CASProvider';\n\ninterface CourseContext {\n courses: Array<Course>;\n basket: Array<Basket>;\n addToBasket: (courses: Course) => void;\n addGroup: (group: Group, id: number) => void;\n deleteFromBasket: (id: number) => void;\n saveBasket: () => void;\n}\nexport const coursesContext = createContext<CourseContext | undefined>(undefined);\n\ninterface CoursesProviderProps {\n children: ReactNode;\n}\n\nexport const CoursesProvider = ({ children }: CoursesProviderProps) => {\n //fetch courses with groups\n const [courses, setCourses] = useState<Array<Course>>([]);\n const [basket, setBasket] = useState<Array<Basket>>([]);\n\n const CAS = useContext(CASContext)!;\n const token = CAS?.user?.token;\n\n const addToBasket = (course: Course) => {\n const courseToBasket = {\n name: course.name,\n id: course.id,\n classes: course.classes[0],\n lecture: course.lectures !== undefined ? course.lectures[0] : undefined,\n } as Basket;\n setBasket([...basket, courseToBasket]);\n };\n const deleteFromBasket = (id: number) => setBasket(basket.filter((course) => course.id !== id));\n\n const saveBasket = async () => {\n try {\n let data = [7, 43, 54];\n let json = JSON.stringify(data);\n let post_data = { json_data: json };\n const ech = await axios.post<Array<number>>(\n `${process.env.REACT_APP_API_URL}/api/v1/commisions/add?`,\n [7, 43, 54],\n {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n },\n );\n console.log('api response;', ech);\n } catch (e) {\n console.log(e);\n }\n console.log('saving to basket');\n };\n\n const addGroup = (choosenGroup: Group, id: number) => {\n const basketCourse = basket.filter((course) => course.id === id)[0];\n const type = choosenGroup.type;\n if (type === GroupType.CLASS) {\n setBasket(\n basket.map((basket) => (basket.id === basketCourse.id ? { ...basket, classes: choosenGroup } : basket)),\n );\n } else if (type === GroupType.LECTURE) {\n setBasket(\n basket.map((basket) => (basket.id === basketCourse.id ? { ...basket, lecture: choosenGroup } : basket)),\n );\n }\n };\n\n useEffect(() => {\n const fetchData = async () => {\n const { data } = await axios.get<Array<{ id: string; name: string; groups: Array<Group> }>>(\n `${process.env.REACT_APP_API_URL}/api/v1/courses/getCoursesWithGroups`,\n );\n const courses = data.map(({ id, name, groups }) => ({\n id: parseInt(id),\n name,\n lectures: groups.filter(({ type }) => type === GroupType.LECTURE),\n classes: groups.filter(({ type }) => type === GroupType.CLASS),\n })) as Array<Course>;\n courses.sort((a: Course, b: Course) => (a.name > b.name ? 1 : -1));\n\n setCourses(courses);\n };\n fetchData();\n }, []);\n\n return (\n <coursesContext.Provider value={{ courses, basket, addToBasket, addGroup, deleteFromBasket, saveBasket }}>\n {children}\n </coursesContext.Provider>\n );\n};\n","import React, { useState, useContext, useEffect, MouseEvent, ChangeEvent } from 'react';\nimport axios from 'axios';\nimport { Input } from '@material-ui/core';\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\nimport { coursesContext } from '../contexts/CoursesProvider';\nimport { Course, Basket } from '../types';\nimport styled from 'styled-components';\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst DropdownStyled = styled.div`\n max-height: 420px;\n overflow-y: auto;\n scroll-snap-type: y mandatory;\n scroll-behavior: smooth;\n z-index: 100;\n position: relative;\n border-radius:0px 0px 0px 15px;\n ::-webkit-scrollbar-track {\n border-radius: 10px;\n background-color: #f5f5f5;\n }\n ::-webkit-scrollbar {\n width: 12px;\n background-color: #f5f5f5;\n }\n ::-webkit-scrollbar-thumb {\n border-radius: 10px;\n background-color: #d4b851;\n border: 1px solid;\n }\n`;\n\nconst CourseStyled = styled.div`\n position: relative;\n z-index: 10;\n padding: 5px;\n padding-left: 20px;\n background-color: #e6c759;\n font-size: 18px;\n font-family: Lato;\n scroll-snap-align: end;\n border-bottom:1px solid;\n :hover {\n background-color: #d4b851;\n cursor: pointer;\n }\n`;\n\nconst useStyles = makeStyles({\n topbarInput: {\n marginTop: '8px',\n width: '100%',\n },\n});\n\ninterface DropdownProps {\n clearInput: boolean;\n handleClearInput: () => void;\n}\n\nexport const Dropdown = ({ clearInput, handleClearInput }: DropdownProps) => {\n const classes = useStyles();\n\n const [open, setOpen] = React.useState(false);\n const [input, setInput] = useState<string>('');\n\n //courses - choosenCourses\n const [filteredCourses, setFilteredCourses] = useState<Array<Course>>([]);\n\n const { courses, basket, addToBasket } = useContext(coursesContext)!;\n\n useEffect(() => {\n const filterCourses = (input: string) => {\n const choosenCoursesNames = basket.map(({ name }) => name.trim());\n const filteredCourses = courses.filter(\n ({ name }) => name.toLowerCase().includes(input.toLowerCase()) && !choosenCoursesNames.includes(name),\n );\n setFilteredCourses(filteredCourses);\n };\n filterCourses(input);\n }, [input, open, basket]);\n\n useEffect(() => {\n clearInput && (setInput(''), handleClearInput());\n }, [clearInput]);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => setInput(event.target.value);\n\n const handleClick = () => setOpen(true);\n\n const handleClickAway = () => setOpen(false);\n\n const onCourseClick = async (event: MouseEvent) => {\n const target = event.currentTarget;\n if (target.id && target.textContent) {\n const course = filteredCourses.find(({ id }) => id.toString() === target.id)!;\n console.log('added course is');\n console.log(course);\n addToBasket(course);\n setOpen(false);\n }\n };\n\n return (\n <ClickAwayListener onClickAway={handleClickAway}>\n <div>\n <Input\n placeholder=\"Wyszukaj...\"\n inputProps={{ 'aria-label': 'description' }}\n className={classes.topbarInput}\n onChange={handleChange}\n onClick={handleClick}\n value={input}\n />\n {open && (\n <DropdownStyled>\n {filteredCourses.map(({ name, id }, index) => (\n <CourseStyled key={index} id={id.toString()} onClick={onCourseClick}>\n <p>{name} </p>\n </CourseStyled>\n ))}\n </DropdownStyled>\n )}\n </div>\n </ClickAwayListener>\n );\n};\n","import React, { useState, MouseEvent } from 'react';\nimport Transfer from '../assets/transfer.png';\nimport Search from '../assets/search.svg';\nimport UK from '../assets/UK.png';\nimport PL from '../assets/PL.png';\nimport User from '../assets/user.png';\nimport CloseIcon from '../assets/close.svg';\nimport { Profile } from './Profile';\nimport { Dropdown } from './Dropdown';\nimport styled from 'styled-components';\n\nconst TopbarTextStyled = styled.div`\n @media only screen and (max-width: 670px) {\n display: none;\n }\n`;\n\nconst Topbar = styled.div`\n background-color: #ffdc61;\n height: 80px;\n padding: 5px;\n font-family: comic sans MS;\n font-size: 24px;\n font-weight: bold;\n display: flex;\n justify-content: space-between;\n`;\n\nconst TopbarLogoWrapperStyled = styled.div`\n display: flex;\n align-items: center;\n flex-grow: 0.5;\n justify-content: flex-start;\n`;\n\nconst TopbarLogoStyled = styled.img`\n width: 80px;\n height: 80px;\n @media only screen and (max-width: 670px) {\n width: 60px;\n height: 60px;\n }\n`;\n\nconst TopbarInputStyled = styled.div`\n width: 70%;\n display: flex;\n flex-grow: 3;\n`;\n\nconst TopbarInputFieldStyled = styled.div`\n width: 96%;\n margin-top: 10px;\n`;\n\nconst TopbarInputIconStyled = styled.img`\n width: 35px;\n @media only screen and (max-width: 670px) {\n width: 25px;\n }\n cursor: pointer;\n`;\n\nconst TopbarIcon = styled.img`\n width: 50px;\n cursor: pointer;\n @media only screen and (max-width: 670px) {\n width: 35px;\n }\n`;\n\nconst TopbarIconBox = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-around;\n flex-grow: 1.5;\n`;\n\ninterface TopbarProps {\n handleTransfer: (e: MouseEvent) => void;\n}\n\nexport default function ({ handleTransfer }: TopbarProps) {\n const [clearInput, setClearInput] = useState(false);\n const [isPolish, setIsPolish] = useState(false);\n const [anchorEl, setAnchorEl] = useState<HTMLImageElement | null>(null);\n\n const onLangChange = () => setIsPolish(!isPolish);\n\n const handleProfile = (event: MouseEvent<HTMLImageElement>) => setAnchorEl(event.currentTarget);\n\n const handleClose = () => setAnchorEl(null);\n\n const handleClearInput = () => setClearInput(!clearInput);\n\n return (\n <Topbar>\n <TopbarLogoWrapperStyled>\n <TopbarLogoStyled alt=\"logo\" src=\"https://plannaplan.pl/img/logo.svg\" />\n <TopbarTextStyled> plan na plan </TopbarTextStyled>\n </TopbarLogoWrapperStyled>\n <TopbarInputStyled>\n <TopbarInputIconStyled alt=\"search\" src={Search} />\n <TopbarInputFieldStyled>\n <Dropdown clearInput={clearInput} handleClearInput={handleClearInput} />\n </TopbarInputFieldStyled>\n <TopbarInputIconStyled alt=\"close\" src={CloseIcon} onClick={handleClearInput} />\n </TopbarInputStyled>\n <TopbarIconBox>\n <TopbarIcon alt=\"transfer\" src={Transfer} onClick={handleTransfer} />\n <TopbarIcon alt=\"change_language\" src={isPolish ? UK : PL} onClick={onLangChange} />\n <TopbarIcon alt=\"profile\" src={User} onClick={handleProfile} />\n <Profile anchorEl={anchorEl} handleClose={handleClose} />\n </TopbarIconBox>\n </Topbar>\n );\n}\n","import React from 'react';\nimport Modal from '@material-ui/core/Modal';\nimport Fade from '@material-ui/core/Fade';\nimport Input from '@material-ui/core/Input';\nimport { makeStyles } from '@material-ui/core/styles';\nimport styled from 'styled-components';\n\ninterface TransferProps {\n handleClose: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n isOpen: boolean;\n}\n\nconst useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n justifyContent: 'center',\n textAlign: 'center',\n alignItems: 'center',\n },\n});\n\nconst TransferStyled = styled.div`\n display: flex;\n\n flex-direction: row;\n\n outline: none;\n min-width: 35%;\n height: 70%;\n padding-top: 40px;\n background: #006b96;\n box-shadow: 0px 0px 0px 4px #006b96;\n border: 4px solid #ffc400;\n margin: 0 auto;\n border-top-left-radius: 5px;\n border-bottom-right-radius: 5px;\n text-transform: uppercase;\n letter-spacing: 0.3ch;\n`;\n\nconst TransferGiveStyled = styled.div`\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst TransferReceiveStyled = styled.div`\n flex-grow: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n`;\n\nconst TransferTextStyled = styled.div`\n font-family: Lato;\n font-size: 30px;\n margin-bottom: 10px;\n`;\n\nconst TransferInputStyled = styled.div`\n width: 250px;\n height: 25px;\n padding: 10px;\n font-size: 24px;\n transition-duration: 0.3s;\n input::placeholder {\n color: black;\n font-weight: bold;\n text-align: center;\n }\n`;\n\nexport const Transfer = ({ handleClose, isOpen }: TransferProps) => {\n const classes = useStyles();\n\n return (\n <div>\n <Modal\n className={classes.wrapper}\n open={isOpen}\n onClose={handleClose}\n aria-labelledby=\"simple-modal-title\"\n aria-describedby=\"simple-modal-description\"\n >\n <Fade in={isOpen}>\n <TransferStyled>\n <TransferGiveStyled>\n <TransferTextStyled>Oddam</TransferTextStyled>\n <TransferInputStyled>\n {' '}\n <Input\n placeholder=\"Wyszukaj...\"\n inputProps={{ 'aria-label': 'description' }}\n className=\"top-bar__input-field\"\n />\n </TransferInputStyled>\n </TransferGiveStyled>\n <TransferReceiveStyled>\n <TransferTextStyled>Przyjmę</TransferTextStyled>\n <TransferInputStyled>\n {' '}\n <Input\n placeholder=\"Wyszukaj...\"\n inputProps={{ 'aria-label': 'description' }}\n className=\"top-bar__input-field\"\n />\n </TransferInputStyled>\n </TransferReceiveStyled>\n </TransferStyled>\n </Fade>\n </Modal>\n </div>\n );\n};\n","import React, { MouseEvent, useEffect, useState } from 'react';\nimport { Group, GroupType } from '../types';\nimport styled from 'styled-components/macro';\nimport Popover from '@material-ui/core/Popover';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles, createStyles, Theme } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles((theme: Theme) =>\n createStyles({\n popover: {\n pointerEvents: 'none',\n },\n paper: {\n padding: theme.spacing(1),\n marginLeft: 5,\n textAlign: 'center',\n },\n }),\n);\n\ninterface SchedulerEventProps {\n eventIndex: number;\n cellTop: number;\n cellWidth: number;\n cellHeight: number;\n}\n\nconst SchedulerEvent = styled.div<SchedulerEventProps>`\n position: absolute;\n display: flex;\n top: ${({ cellTop }) => cellTop}px;\n left: ${({ cellWidth, eventIndex }) => cellWidth + 5 + cellWidth * eventIndex}px;\n width: ${({ cellWidth }) => (cellWidth * 2.5) / 3}px;\n height: ${({ cellHeight }) => (cellHeight * 2 * 3) / 4}px;\n z-index: 2;\n`;\n\ninterface ClassesProps{\n cellWidth: number;\n cellHeight: number;\n groupType: GroupType;\n}\n\nconst Classes = styled.div<ClassesProps>`\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 2;\n border-radius: 10px;\n \n font-size:0.90vw;\n /* background-color: rgb(100, 181, 246); */\n width: ${({ cellWidth }) => (cellWidth * 2.5) / 3}px;\n height: ${({ cellHeight }) => (cellHeight * 2 * 3) / 4}px;\n margin-right: 5px;\n text-align: center;\n background-color:${({groupType})=>groupType === \"CLASS\" ? \"#FFDC61\" : \"#A68820\"};\n box-shadow: 9px 9px 8px -2px rgba(0,0,0,0.59);\n`;\n\ninterface SchedulerRowProps {\n groups: Array<Group & { name: string }>;\n indexRow: number;\n cellTop: number;\n cellWidth: number;\n cellHeight: number;\n}\n\nexport const SchedulerRow = ({ groups, indexRow, cellTop, cellWidth, cellHeight }: SchedulerRowProps) => {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = React.useState<HTMLDivElement | null>(null);\n const [popoverId, setPopoverId] = useState<string | null>(null);\n\n //looks weird\n const handlePopoverOpen = (event: MouseEvent<HTMLDivElement, globalThis.MouseEvent>) => {\n setAnchorEl(event.currentTarget);\n setPopoverId(event.currentTarget.id);\n };\n\n const handlePopoverClose = () => {\n setAnchorEl(null);\n setPopoverId(null);\n };\n\n const open = Boolean(anchorEl);\n\n return (\n <>\n {[...Array(5)].map((_, eventIndex) => (\n <SchedulerEvent\n eventIndex={eventIndex}\n cellTop={cellTop}\n cellWidth={cellWidth}\n cellHeight={cellHeight}\n key={eventIndex}\n id={`eventRow${indexRow}eventCol${eventIndex}`}\n >\n {groups.map(\n (group, index) =>\n group.day === eventIndex && (\n <>\n <Classes\n groupType={group.type}\n cellWidth={cellWidth}\n cellHeight={cellHeight}\n id={`eventRow${indexRow}eventCol${eventIndex}${index}`}\n key={index}\n aria-owns={open ? `mouse-over-popover` : undefined}\n aria-haspopup=\"true\"\n onMouseEnter={(e) => handlePopoverOpen(e)}\n onMouseLeave={handlePopoverClose}\n >\n <p>\n {groups[index].name}\n <br></br>\n {groups[index].room}\n </p>\n </Classes>\n <Popover\n id={`mouse-over-popover`}\n className={classes.popover}\n classes={{\n paper: classes.paper,\n }}\n open={popoverId === `eventRow${indexRow}eventCol${eventIndex}${index}`}\n anchorEl={anchorEl}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'center',\n horizontal: 'left',\n }}\n onClose={handlePopoverClose}\n disableRestoreFocus\n >\n <Typography>\n <p>{groups[index].name}</p>\n <p>{groups[index].lecturer}</p>\n <p>{groups[index].room}</p>\n </Typography>\n </Popover>\n </>\n ),\n )}\n </SchedulerEvent>\n ))}\n </>\n );\n};\n","import React, { useContext, useEffect, useState, MouseEvent } from 'react';\nimport { SchedulerRow } from './SchedulerRow';\nimport { coursesContext } from '../contexts/CoursesProvider';\nimport { Group, Basket } from '../types';\n\ninterface SchedulerEventsProps {\n cellTop: number;\n cellWidth: number;\n cellHeight: number;\n}\n\nexport const SchedulerEvents = ({ cellTop, cellWidth, cellHeight }: SchedulerEventsProps) => {\n const { basket } = useContext(coursesContext)!;\n\n const [choosenGroupsMappedToEvents, setChoosenGroupsMappedToEvents] = useState<any>([]);\n\n interface GroupTimeToEventRowMapping {\n [time: string]: number;\n }\n const groupTimeToEventRowMapping: GroupTimeToEventRowMapping = {\n '8.15': 0,\n '10.00': 1,\n '11.45': 2,\n '13.45': 3,\n '15.30': 4,\n '17.15': 5,\n };\n\n useEffect(() => {\n function mapGroupTimeToEventRow(basket: Array<Basket>) {\n const classes = basket.map(({ classes, name }) => ({ ...classes, name })) as Array<Group & { name: string }>;\n const lectures = basket.map(({ lecture, name }) => ({ ...lecture, name })) as Array<Group & { name: string }>;\n const merged = [...classes, ...lectures];\n\n //deleted if statement, maybe it is needed\n const groupsMapped = merged.map(({ id, day, lecturer, room, time, name,type }) => ({\n id,\n day,\n lecturer,\n room,\n eventRow: groupTimeToEventRowMapping[time],\n name,\n type,\n }));\n setChoosenGroupsMappedToEvents(groupsMapped);\n }\n mapGroupTimeToEventRow(basket);\n }, [basket]);\n\n return (\n <div>\n {[...Array(6)].map((_, index) => (\n <SchedulerRow\n key={index}\n groups={choosenGroupsMappedToEvents.filter((group: any) => group.eventRow === index)}\n indexRow={index}\n cellTop={\n index === 0\n ? cellTop + (cellHeight + cellHeight * 2 * index + cellHeight / 4)\n : index === 1\n ? cellTop + (cellHeight + cellHeight * 2 * index)\n : index === 2\n ? cellTop + (cellHeight + cellHeight * 2 * index - cellHeight / 4)\n : index === 3\n ? cellTop + (cellHeight + cellHeight * 2 * index - cellHeight / 4)\n : index === 4\n ? cellTop + (cellHeight + cellHeight * 2 * index - cellHeight / 2)\n : index === 5\n ? cellTop + (cellHeight + cellHeight * 2 * index - (cellHeight * 3) / 4)\n : 0\n }\n cellWidth={cellWidth}\n cellHeight={cellHeight}\n />\n ))}\n </div>\n );\n};\n","export const days = [\n \"\",\n \"Poniedziałek\",\n \"Wtorek\",\n \"Środa\",\n \"Czwartek\",\n \"Piątek\",\n];\nexport const hours = [\n \"8:00\",\n \"9:00\",\n \"10:00\",\n \"11:00\",\n \"12:00\",\n \"13:00\",\n \"14:00\",\n \"15:00\",\n \"16:00\",\n \"17:00\",\n \"18:00\",\n \"19:00\",\n];\n","import React, { useEffect, MouseEvent, useRef } from 'react';\nimport { useState } from 'react';\nimport { SchedulerEvents } from './SchedulerEvents';\nimport { days, hours } from '../constants/index';\nimport styled from 'styled-components/macro';\n\nconst SchedulerWrapper = styled.div`\n border-collapse: collapse;\n flex-grow: 1;\n`;\n\nconst TableBody = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nconst TableRow = styled.div`\n display: flex;\n`;\n\nconst TableHead = styled.div`\n display: flex;\n width: 100%;\n`;\n\ninterface TableCellProps {\n height: number;\n}\n\nconst TableCell = styled.div<TableCellProps>`\n height: ${({ height }) => height}px;\n border: 1px solid #ddd;\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n font-size: 1.25vw;\n`;\n\nconst T = styled.table`\n width: 100%;\n height: 100%;\n`;\n\nexport const Scheduler = () => {\n const cellRef = useRef<HTMLDivElement>(null);\n const [cellWidth, setCellWidth] = useState(0);\n const [cellTop, setCellTop] = useState(0);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const [wrapperHeight, setWrapperHeight] = useState(0);\n\n useEffect(() => {\n const handleResize = () => {\n if (cellRef.current && wrapperRef.current) {\n setCellWidth(cellRef.current.getBoundingClientRect().width);\n setCellTop(cellRef.current.getBoundingClientRect().top);\n setWrapperHeight(wrapperRef.current.getBoundingClientRect().height);\n }\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n }, []);\n\n return (\n <>\n <SchedulerWrapper ref={wrapperRef}>\n <TableHead>\n {days.map((day, indexCell) =>\n indexCell === 0 ? (\n <TableCell /* style={{ flexGrow: 1 }} */ height={wrapperHeight / 13} key={indexCell} ref={cellRef}>\n {day}\n </TableCell>\n ) : (\n <TableCell /* style={{ flexGrow: 3 }} */ height={wrapperHeight / 13} key={indexCell} ref={cellRef}>\n {day}\n </TableCell>\n ),\n )}\n </TableHead>\n <TableBody>\n {hours.map((hour, indexRow) => (\n <TableRow key={indexRow}>\n {[hour, '', '', '', '', ''].map((value, indexCell) =>\n indexCell === 0 ? (\n <TableCell /* style={{ flexGrow: 1 }} */ height={wrapperHeight / 13} key={`${indexRow}${indexCell}`}>\n {value}\n </TableCell>\n ) : (\n <TableCell /* style={{ flexGrow: 3 }} */ height={wrapperHeight / 13} key={`${indexRow}${indexCell}`}>\n {value}\n </TableCell>\n ),\n )}\n </TableRow>\n ))}\n </TableBody>\n <SchedulerEvents cellTop={cellTop} cellWidth={cellWidth} cellHeight={wrapperHeight / 13} />\n </SchedulerWrapper>\n </>\n );\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M38 12.83l-2.83-2.83-11.17 11.17-11.17-11.17-2.83 2.83 11.17 11.17-11.17 11.17 2.83 2.83 11.17-11.17 11.17 11.17 2.83-2.83-11.17-11.17z\"\n});\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M0 0h48v48h-48z\",\n fill: \"none\"\n});\n\nvar SvgClose = function SvgClose(_ref) {\n var svgRef = _ref.svgRef,\n title = _ref.title,\n props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n height: 48,\n viewBox: \"0 0 48 48\",\n width: 48,\n ref: svgRef\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2, _ref3);\n};\n\nvar ForwardRef = React.forwardRef(function (props, ref) {\n return /*#__PURE__*/React.createElement(SvgClose, _extends({\n svgRef: ref\n }, props));\n});\nexport default __webpack_public_path__ + \"static/media/close.464128e7.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useState, useContext, MouseEvent } from 'react';\nimport Collapse from '@material-ui/core/Collapse';\nimport ExpandIcon from '../assets/expand.png';\nimport { Course, Group, GroupType } from '../types/index';\nimport { coursesContext } from '../contexts/CoursesProvider';\nimport styled from 'styled-components';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ReactComponent as CloseIcon } from '../assets/close.svg';\n\ninterface ClassExandIconProps {\n isSelected: boolean;\n}\n\nconst CourseStyled = styled.div`\n display: flex;\n min-height: 40px;\n background-color: rgb(100, 181, 246) !important;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n margin-top: 10px;\n padding-top: 10px;\n padding-bottom: 10px;\n border-radius: 10px;\n cursor: pointer;\n align-items: stretch;\n position: relative;\n box-shadow: 9px 9px 8px -2px rgba(0,0,0,0.59);\n`;\n\nconst CourseNameStyled = styled.div`\npadding-top:20px;\npadding-bottom:10px;\npadding-left:35px;\npadding-right:35px;\n`;\n\ninterface ClassGroupProps {\n groupType: GroupType;\n}\n\nconst ClassGroupStyled = styled.div`\nposition:relative;\n padding-top: 1px;\n padding-bottom: 1px;\n :hover {\n cursor: pointer;\n background-color:#9ED3FF;\n }\n`;\n\nconst ClassExandIconStyled = styled.img<ClassExandIconProps>`\n margin-top: 5px;\n width: 20px;\n transition: 0.2s;\n transform: ${(props) => (props.isSelected ? 'scaleY(-1);' : 'scaleY(1);')};\n`;\n\nconst TypeClass = styled.div`\n font-size:12px;\n position:absolute;\n border-radius:15px;\n background-color:#00506B;\n border:2px solid;\n min-width:45px;\n top:5px;\n left:5px;\n color:white;\n font-weight:bold;\n`;\n\nconst useStyles = makeStyles({\n expanded: {\n maxHeight: '244px',\n overflowY: 'auto',\n '&::-webkit-scrollbar': {\n width: '0.4em',\n },\n '&::-webkit-scrollbar-track': {\n '-webkit-box-shadow': 'inset 0 0 6px rgba(1,0,0,0.1)',\n },\n '&::-webkit-scrollbar-thumb': {\n borderRadius: '10px',\n backgroundColor: '#d4b851',\n outline: '1px solid slategrey',\n },\n },\n});\n\nconst DeleteFromBasketIcon = styled(CloseIcon)`\n width: 20px;\n cursor: pointer;\n position: absolute;\n left: 230px;\n top: -5px;\n &:hover {\n fill: white;\n }\n`;\n\ninterface CourseCardProps {\n course: Course;\n}\n\nexport const CourseCard = ({ course }: CourseCardProps) => {\n const classes = useStyles();\n const { addGroup, deleteFromBasket } = useContext(coursesContext)!;\n const [isSelected, setSelected] = useState(false);\n const groups = course.lectures === undefined ? course.classes : [...course.lectures, ...course.classes];\n\n const onGroupClick = (group: Group, id: number) => addGroup(group, id);\n\n return (\n <CourseStyled>\n <DeleteFromBasketIcon onClick={() => deleteFromBasket(course.id)}></DeleteFromBasketIcon>\n <CourseNameStyled onClick={() => setSelected(!isSelected)}>{course.name}</CourseNameStyled>\n <Collapse className={classes.expanded} in={isSelected} timeout=\"auto\" unmountOnExit>\n {groups\n .sort((a, b) => b.type.localeCompare(a.type))\n .map((group, index) => (\n <ClassGroupStyled key={index} onClick={() => onGroupClick(group, course.id)}>\n <TypeClass>{group.type===\"CLASS\"? \"Ćw.\" : \"Wyk.\"}</TypeClass>\n <p>\n {group.time} {group.room} <br></br> {group.lecturer}\n </p>\n </ClassGroupStyled>\n ))}\n </Collapse>\n <div onClick={() => setSelected(!isSelected)}>\n <ClassExandIconStyled isSelected={isSelected} alt=\"expand\" src={ExpandIcon} />\n </div>\n </CourseStyled>\n );\n};\n","import React, { useContext } from 'react';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport { CourseCard } from './CourseCard';\nimport { coursesContext } from '../contexts/CoursesProvider';\nimport MuiAlert, { AlertProps } from '@material-ui/lab/Alert';\nimport styled from 'styled-components';\nimport { debounce } from \"lodash\";\n\nconst RightbarStyled = styled.div`\n padding-top: 10px;\n padding-left: 15px;\n padding-right: 15px;\n text-align: center;\n font-family: Lato;\n height: 100%;\n width: 300px;\n overflow-y: scroll;\n ::-webkit-scrollbar-track {\n border-radius: 10px;\n background-color: #f5f5f5;\n }\n ::-webkit-scrollbar {\n width: 12px;\n background-color: #f5f5f5;\n }\n ::-webkit-scrollbar-thumb {\n border-radius: 10px;\n background-color: #d4b851;\n border: 1px solid;\n }\n`;\nconst RightbarTextStyled = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst SaveButton = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n background-color: #417cab !important;\n border-radius: 10px;\n cursor: pointer;\n height: 40px;\n background-color: red;\n margin-bottom: 10px;\n &:hover {\n color: white;\n }\n box-shadow: 6px 6px 6px -2px rgba(0,0,0,0.59);\n`;\n\nfunction Alert(props: AlertProps) {\n return <MuiAlert elevation={6} variant=\"filled\" {...props} />;\n}\n\nexport const Rightbar = () => {\n const { courses, basket, saveBasket } = useContext(coursesContext)!;\n\n const [open, setOpen] = React.useState(false);\n\n const getBasketGroups = () => {\n const names = basket.map(({ name }) => name);\n return courses.filter(({ name }) => names.includes(name));\n };\n\n const filteredCourses = getBasketGroups();\n\n const save = debounce(() => {\n saveBasket();\n setOpen(true);\n console.log(\"zmiana\")\n },500);\n\n const handleClose = (event?: React.SyntheticEvent, reason?: string) => {\n if (reason === 'clickaway') {\n return;\n }\n\n setOpen(false);\n };\n\n //need to insert student name from db and course maybe based on current time or from db too\n return (\n <RightbarStyled>\n <RightbarTextStyled>\n <p>\n Hubert Wrzesiński<br></br>\n Semestr zimowy 2020/2021\n </p>\n <SaveButton onClick={save}>ZAPISZ</SaveButton>\n </RightbarTextStyled>\n {filteredCourses.map((course, index) => (\n <CourseCard course={course} key={index} />\n ))}\n <Snackbar open={open} autoHideDuration={5000} onClose={handleClose}>\n <Alert onClose={handleClose} severity=\"success\">\n Zapisano plan!\n </Alert>\n </Snackbar>\n </RightbarStyled>\n );\n};\n","import React, { useState, useContext } from 'react';\nimport Topbar from './Topbar';\nimport { Transfer } from './Transfer';\nimport { Scheduler } from './Scheduler';\nimport { Rightbar } from './Rightbar';\nimport styled from 'styled-components';\n\nconst Wrapper = styled.div`\n display: flex;\n height: calc(100vh - 80px);\n`;\n\nexport const App = () => {\n const [isOpenTransfer, setOpenTransfer] = useState(false);\n\n const handleTransfer = () => {\n setOpenTransfer(!isOpenTransfer);\n };\n\n return (\n <>\n <Topbar handleTransfer={handleTransfer} />\n <Transfer isOpen={isOpenTransfer} handleClose={handleTransfer} />\n <Wrapper>\n <Scheduler />\n <Rightbar />\n </Wrapper>\n </>\n );\n};\n","import { createGlobalStyle } from 'styled-components';\n\nexport const GlobalStyles = createGlobalStyle`\n *, *::before, *::after {\n box-sizing: border-box;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n body {\n margin: 0;\n padding: 0;\n line-height: 24px;\n \n }\n\n body::-webkit-scrollbar {\n display: none;\n }\n`;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { App } from './components/App';\nimport { CASProvider } from './contexts/CASProvider';\nimport { CoursesProvider } from './contexts/CoursesProvider';\nimport { GlobalStyles } from './styles/GlobalStyles';\n\nReactDOM.render(\n <>\n <CASProvider>\n <CoursesProvider>\n <GlobalStyles />\n <App />\n </CoursesProvider>\n </CASProvider>\n </>,\n document.getElementById('root'),\n);\n","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/search.fa0d12ae.svg\";","module.exports = __webpack_public_path__ + \"static/media/UK.b4dad475.png\";","module.exports = __webpack_public_path__ + \"static/media/PL.6e9ee893.png\";","module.exports = __webpack_public_path__ + \"static/media/user.4ba6e2a4.png\";","module.exports = __webpack_public_path__ + \"static/media/close.464128e7.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAYAAADFeBvrAAAABmJLR0QA/wD/AP+gvaeTAAABzElEQVRoge2YyUoDQRCGv6jvJOLFJxAvrrjvRo0b4oYgCCIIIogggogX0Wfxntz1qCfjzSweZhqTOMl0OdOZCPVBQS5V9X8TmHQaFEVRFEVRFKXF6QSegSzQm3CWSnqBHF62TtumbuADKPtVACZcpBMyBHzxk+sT6AlrqpUxVQSmHAW1YYRqGSupLiAf0FQpNecwdD3m/N31cuXxsv8i16DJVAlYchq/miV/Z1iubFDzu0Wjkco4lDBksJMpA29BA9KWzaa2nKl4syVZ0nENOnQgsy3McBA2cFM48DRGmR3h7n3bwRvCwXFIHQl37kkXrAsXnEWQORbu2v3rokXs3zRl4BxICXecCOaX8B50JBaQSV1jJ5UCLoQya1FlDPPIpG6AthCZS6FM7L99UqlbgqVSwJVQZjVuGUPYuaq2HoCOiv524E4os+JKxjCLTOoRT6oduBfKLLuWMUhfFE9+SWQWmiVjmEH2TUlk6p7NXDNNvFKJyhjikmr2f62GTBFNqoR3KmkphvEuVKQyRWCy+XHtqL2ZCatWuVFqyCB2UgVgPKGMYsKk/pWMYYBgqQIwlmCuSPRTLVUARhNNFAN9wCvw4n9WFEVRFEVJiG+EQQBfw7skMgAAAABJRU5ErkJggg==\""],"sourceRoot":""}