{"version":3,"sources":["assets/img/icons sync /^/.*/.svg$","assets/img/logo.svg","assets/img/icons/calendar.svg","assets/img/icons/car.svg","assets/img/icons/common/github.svg","assets/img/icons/common/google.svg","assets/img/icons/flask.svg","assets/img/icons/mortarboard.svg","assets/img/icons/risk.svg","assets/img/icons/schedule.svg","assets/img/icons/school.svg","assets/img/icons/user-calendar.svg","infrastructure/Constants.js","assets/img/wyvern.svg","infrastructure/StorageService.js","context/UserContext.js","infrastructure/ProtectedRoute.js","components/Navbars/AdminNavbar.js","components/Footers/AdminFooter.js","components/Headers/Header.js","components/Sidebar/Sidebar.js","infrastructure/Services/ApiService.js","infrastructure/Services/DataService.js","components/Common/AlertModal.js","components/Timetable/Timetable.js","components/Timetable/TimetableList.js","components/Common/Loader.js","components/Authentication/OAuth/Callback.js","views/bookings/DateSelector.js","components/Common/FormStepHeader.js","components/Common/FormColumn.js","components/Common/RiskMatrix.js","views/bookings/forms/LabBookings/RiskAssessmentStep.js","views/bookings/forms/LabBookings/Step1.js","views/bookings/forms/LabBookings/Step2.js","views/bookings/forms/Submit.js","views/bookings/forms/LabBookings/Form.js","views/bookings/Modal.js","routes.js","views/Index.js","views/bookings/LabBookings.js","views/bookings/Booking.js","views/admin/index.js","views/admin/SavedBookings.js","views/admin/terms.js","views/auth/Login.js","components/Title/Title.js","layouts/Layout.js","layouts/Auth.js","App.js","index.js"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","api","storageUrl","urls","production","development","periods","user","sasToken","labBookingCampuses","labBookingRiskTemplate","terms","leadTime","key","defaultValue","storageObject","sessionStorage","getItem","JSON","parse","exp","value","strObject","stringify","setItem","removeItem","clear","UserContext","React","createContext","givenName","fullName","token","isAuthenticated","isAdmin","changeDetails","login","logout","UserContextProvider","children","updateValues","values","setValue","prevState","newState","StorageService","a","newValues","length","useState","Provider","PrivateRoute","Component","component","authed","rest","render","props","to","pathname","state","from","location","useContext","history","useHistory","Navbar","className","expand","Container","fluid","alt","src","require","style","height","Nav","navbar","NavItem","href","target","UncontrolledDropdown","nav","DropdownToggle","Media","name","size","round","DropdownMenu","right","DropdownItem","onClick","push","maxWidth","float","display","Footer","Row","Col","xl","Date","getFullYear","rel","NavLink","Title","Constants","default","ApiService","getUrl","path","url","window","host","toLocaleLowerCase","startsWith","getHeaders","headers","post","data","onError","apiUrl","request","Request","method","body","fetch","resp","status","json","put","delete","get","prop","qs","fromStorage","organisationId","tokenJson","then","catch","labBookings","campuses","riskTemplate","addBusinessDays","date","days","dt","setHours","d","moment","add","Math","floor","remaining","day","title","content","show","onConfirm","onCancel","confirmText","Modal","isOpen","aria-label","data-dismiss","type","aria-hidden","maxHeight","overflowX","dangerouslySetInnerHTML","__html","DOMPurify","sanitize","Button","color","isMouseDown","setPeriods","setStartHour","setEndHour","bookings","setBookings","setDays","now","setNow","newBooking","setNewBooking","newBookingRef","useRef","completeBooking","showAlertModal","setShowAlertModal","set","hour","minute","second","millisecond","cutOff","setCutoff","setIsMouseDown","v","table","setTerms","useEffect","search","queryString","loadData","timer","setInterval","calculateCutOff","clearInterval","_bookings","forEach","booking","_bookingDate","dayNumber","getDay","periodNumbers","colour","i","startPeriod","endPeriod","DataService","newCutOff","tempPeriods","tempTerms","period","startHour","startTime","substring","startMinute","endHour","endTime","endMinute","firstPeriod","sort","b","parseFloat","_startHour","lastPeriod","_endHour","parseInt","_days","filter","x","findIndex","p","getWidth","width","getHeight","isBreak","zoomLevel","editBooking","preventDefault","stopPropagation","bookingDate","format","find","m","campus","campusId","order","split","startPeriodName","endtime","endPeriodName","onNewBooking","mouseOverBooking","mouseOverPeriod","_","debounce","hasAttribute","current","handleMouseUp","document","removeEventListener","handleBookingConfirm","bookingObject","startDate","startPeriodObject","endPeriodObject","renderBooking","bookingPeriod","cellPadding","max","foundBookings","arr1","arr2","reduce","c","includes","offsetHeight","bookingDateMoment","onMouseEnter","onMouseOver","styles","backgroundColor","marginTop","dm","canEdit","practicalName","room","yearLevel","class","technicianNotes","renderRowPeriods","periodDivs","periodHeader","UncontrolledTooltip","delay","placement","renderRowHeader","dayBookings","currentBookings","startPeriodId","bookingOverlapsExistingBookings","periodStyle","periodStartDate","setMinutes","setSeconds","periodEndDate","startOf","difference","getTime","percentage","backgroundPosition","toFixed","data-period","minWidth","padding","onMouseDown","isClick","console","log","diff","addEventListener","originalStart","createNewBooking","persist","overflow","fontSize","position","transition","ref","AlertModal","WebkitTouchCallout","WebkitUserSelect","KhtmlUserSelect","MozUserSelect","MsUserSelect","userSelect","overflowY","tableBottom","borderRadius","minHeight","marginBottom","cursor","zIndex","backgroundImage","backgroundRepeat","margin","left","breakPeriod","getData","_periods","Table","responsive","scope","periodString","bookingTime","role","userContext","match","onDateChange","pickerType","openDatePicker","setOpenDatePicker","dates","setDates","setDate","startOfWeek","endOfWeek","endOf","endDate","handleDateChange","start","newDates","end","icon","UncontrolledPopover","trigger","toggle","prevstate","PopoverBody","renderInput","timeFormat","input","onChange","sectionName","onCloseButtonPress","label","columns","xs","md","borderCollapse","borderSpacing","textAlign","rowspan","cell","colspan","high","extreme","moderate","low","textTransform","onUpdateValue","setListValue","currentStep","index","list","risks","newValue","currentRiskIndex","currentRisk","currentHazardIndex","getListValue","renderHazards","hazards","hazard","Input","bsSize","renderControlMethods","controlMeasures","checked","htmlFor","replace","txt","charAt","toUpperCase","substr","toLowerCase","onUpdateValues","setQuantities","setData","periodData","setPeriodData","isNewPractical","setIsNewPractical","savedBookings","setSavedBookings","users","setUsers","newQuantities","newBookingDate","items","campusData","newData","campusName","bindPeriods","setSavedPractical","savedPractical","personalStore","isUser","attachments","notes","bookReference","technicianAssistanceRequired","pd","dayPeriods","args","rooms","yearLevels","classes","usersValue","practicals","year","userName","FormStepHeader","initialValue","isValidDate","isAfter","dateFormat","toDate","newBookingDay","currentBookingDay","currentStartPeriod","currentEndPeriod","newStartPeriod","newEndPeriod","toISOString","options","option","element","FormColumn","isDisabled","bookingUserId","userId","readOnly","__isNew__","saved","isNew","step","setsRequired","SavePractical","savePractical","rows","bookingNotes","useDropzone","onDrop","files","updateFiles","acceptedFiles","getRootProps","getInputProps","isDragActive","isDragAccept","isDragReject","useMemo","baseStyle","activeStyle","acceptStyle","rejectStyle","file","deleteUploadedFile","toBase64","Promise","reject","reader","FileReader","readAsDataURL","onload","result","onerror","error","_files","aIndex","splice","f","mimeType","attachmentId","deleteAttachment","flex","flexDirection","alignItems","borderWidth","borderColor","borderStyle","outline","onBookingSaved","setError","setStep","riskTemplates","setRiskTemplates","showModal","setShowModal","riskData","updateRiskValue","item","Step1","Step2","RiskMatrix","RiskAssessmentStep","renderRiskSteps","Submit","disabled","ModalBody","bookingId","routes","view","setView","Card","CardHeader","pills","classnames","active","CardBody","TimetableList","layout","useParams","setZoomLevel","refreshBookings","onChangeDate","listUrl","selectedDate","strSelectedDate","endPeriodId","updateZoom","n","z","refresh","setBooking","setTechnicianNotes","createdOn","note","success","toast","onChangeComplete","hex","colors","attachment","open","risk","newClass","setNewClass","newRoom","setNewRoom","newYear","setNewYear","setLeadTime","isDirty","setDirty","save","random","when","message","ci","cls","yl","savedBooking","confirm","editor","ClassicEditor","onReady","event","onBlur","onFocus","username","setUsername","password","setPassword","loading","setLoading","errors","setErrors","authType","setAuthType","isOAuthCallback","setIsOAuthCallback","domain","loginEmailAddress","userParam","usr","emailAddress","redirectUrl","setTimeout","lg","Callback","Alert","Form","FormGroup","InputGroup","InputGroupAddon","addonType","InputGroupText","placeholder","autoComplete","onKeyDown","pathName","indexOf","h1","section","lineHeight","Layout","getRoutes","getBrandText","getTitle","documentElement","scrollTop","scrollingElement","this","refs","mainContent","brandText","Header","AdminFooter","Auth","wyvernContainer","wyvern","top","opacity","App","keyMap","increaseZoom","decreaseZoom","AppRoutes","userContextHasLoaded","setUserContextHasLoaded","storedCredentials","ReactDOM","getElementById"],"mappings":"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","file":"static/js/main.a5ffaa48.chunk.js","sourcesContent":["var map = {\n\t\"./calendar.svg\": 326,\n\t\"./car.svg\": 327,\n\t\"./common/github.svg\": 328,\n\t\"./common/google.svg\": 329,\n\t\"./flask.svg\": 330,\n\t\"./mortarboard.svg\": 331,\n\t\"./risk.svg\": 332,\n\t\"./schedule.svg\": 333,\n\t\"./school.svg\": 334,\n\t\"./user-calendar.svg\": 335\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 124;","module.exports = __webpack_public_path__ + \"static/media/logo.b3128073.svg\";","module.exports = __webpack_public_path__ + \"static/media/calendar.ca07dd88.svg\";","module.exports = __webpack_public_path__ + \"static/media/car.db7910ee.svg\";","module.exports = __webpack_public_path__ + \"static/media/github.2e257125.svg\";","module.exports = __webpack_public_path__ + \"static/media/google.08ea438e.svg\";","module.exports = __webpack_public_path__ + \"static/media/flask.bc938f2d.svg\";","module.exports = __webpack_public_path__ + \"static/media/mortarboard.fa6b5a68.svg\";","module.exports = __webpack_public_path__ + \"static/media/risk.ed428292.svg\";","module.exports = __webpack_public_path__ + \"static/media/schedule.cbe60f8d.svg\";","module.exports = __webpack_public_path__ + \"static/media/school.a364c2e9.svg\";","module.exports = __webpack_public_path__ + \"static/media/user-calendar.efd15d1f.svg\";","export default {\r\n api: {\r\n storageUrl: `https://westminsterbookings.blob.core.windows.net/`,\r\n urls: {\r\n production: `https://westminsterbookings.azurewebsites.net/api/v1/`,\r\n development: `http://localhost:7071/api/v1/`\r\n }\r\n }\r\n}","module.exports = __webpack_public_path__ + \"static/media/wyvern.f6baaf29.svg\";","\r\nexport default {\r\n keys: {\r\n periods : `periods`,\r\n user: `user`,\r\n sasToken: `sastoken`,\r\n labBookingCampuses: `labBookingCampuses`,\r\n labBookingRiskTemplate: `labBookingRiskTemplate`,\r\n terms: `terms`,\r\n leadTime: `leadTime`\r\n },\r\n get : (key, defaultValue) => {\r\n var storageObject = sessionStorage.getItem(key);\r\n if (storageObject){\r\n try{\r\n const jsonObject = JSON.parse(storageObject);\r\n return jsonObject;\r\n }catch(exp){\r\n return defaultValue;\r\n }\r\n }\r\n return defaultValue;\r\n },\r\n set: (key, value) => {\r\n var strObject = JSON.stringify(value); \r\n sessionStorage.setItem(key, strObject);\r\n },\r\n remove: (key) => {\r\n sessionStorage.removeItem(key);\r\n },\r\n clear: () => sessionStorage.clear()\r\n}\r\n","// import React from 'react';\r\n \r\n// const UserContext = React.createContext(null);\r\n \r\n// export default UserContext;\r\n\r\n\r\n\r\nimport React, { useState } from 'react';\r\nimport StorageService from 'infrastructure/StorageService';\r\n\r\nconst UserContext = React.createContext({\r\n givenName: '',\r\n fullName: '',\r\n token: '',\r\n sasToken: '',\r\n isAuthenticated: false,\r\n isAdmin: false,\r\n changeDetails: () => {},\r\n login: () => {},\r\n logout: () => {}\r\n});\r\n\r\nexport default UserContext;\r\n\r\nexport const UserContextProvider = ({ children }) => {\r\n const updateValues = values => {\r\n setValue(prevState => {\r\n const newState = {\r\n ...prevState,\r\n ...values\r\n };\r\n if (values){\r\n StorageService.set(StorageService.keys.user, newState);\r\n }else{\r\n StorageService.remove(StorageService.keys.user);\r\n }\r\n return (newState)});\r\n };\r\n\r\n const changeDetails = async values => {\r\n };\r\n\r\n const login = async values => {\r\n const newValues = {...values};\r\n newValues.isAuthenticated = values.token != null && values.token.length > 0\r\n updateValues(newValues);\r\n };\r\n\r\n const logout = async () => {\r\n updateValues(null);\r\n StorageService.clear();\r\n };\r\n\r\n const [value, setValue] = useState({\r\n givenName: '',\r\n fullName: '',\r\n token: null,\r\n changeDetails: values => changeDetails(values),\r\n login: values => login(values),\r\n logout\r\n });\r\n\r\n return {children};\r\n};\r\n","\r\nimport React, {useContext} from 'react';\r\nimport { BrowserRouter, Route, Switch, Redirect } from \"react-router-dom\";\r\n\r\nfunction PrivateRoute ({component: Component, authed, ...rest}) {\r\n return (\r\n authed === true\r\n ? \r\n : }\r\n />\r\n )\r\n }\r\n export default PrivateRoute;\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport UserContext from \"context/UserContext\";\r\nimport React, { useContext } from \"react\";\r\nimport { Link, NavLink, useHistory } from \"react-router-dom\";\r\nimport Avatar from 'react-avatar';\r\nimport './AdminNavbar.scss';\r\n// reactstrap components\r\nimport {\r\n DropdownMenu,\r\n DropdownItem,\r\n UncontrolledDropdown,\r\n DropdownToggle,\r\n NavItem,\r\n Navbar,\r\n Nav,\r\n Container,\r\n Media\r\n} from \"reactstrap\";\r\n\r\nexport default (props) => {\r\n const user = useContext(UserContext);\r\n const history = useHistory();\r\n const logout = (e) => {\r\n user.logout();\r\n history.push('/auth/login');\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n
\r\n \r\n \r\n\r\n
\r\n\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nconst styles = {\r\n icon: { maxWidth: 40, float:`left`,display: `block`, float: `left` }\r\n};;","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\n/*eslint-disable*/\r\nimport React from \"react\";\r\n\r\n// reactstrap components\r\nimport { Container, Row, Col, Nav, NavItem, NavLink } from \"reactstrap\";\r\n\r\nclass Footer extends React.Component {\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n
\r\n © {new Date().getFullYear()}{\" \"}\r\n \r\n Westminster School\r\n \r\n
\r\n \r\n\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Footer;\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport React from \"react\";\r\n\r\n// reactstrap components\r\nimport {Container } from \"reactstrap\";\r\n\r\nexport default (({Title}) => {\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n {Title}\r\n
\r\n
\r\n
\r\n \r\n );\r\n });\r\n\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\n/*eslint-disable*/\r\nimport React, { useState } from \"react\";\r\nimport { NavLink as NavLinkRRD, Link } from \"react-router-dom\";\r\n// nodejs library to set properties for components\r\n// reactstrap components\r\nimport { Collapse, Navbar, NavItem, NavLink, Nav, Container } from \"reactstrap\";\r\n\r\nimport \"./Sidebar.scss\";\r\nvar ps;\r\n\r\nconst Sidebar = (props) => {\r\n const [collapseOpen, setcollapseOpen] = useState(false);\r\n\r\n const headerLink = (icon, label, link) => {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n\r\n const { bgColor, routes, logo } = props;\r\n let navbarBrandProps;\r\n if (logo && logo.innerLink) {\r\n navbarBrandProps = {\r\n to: logo.innerLink,\r\n tag: Link,\r\n };\r\n } else if (logo && logo.outterLink) {\r\n navbarBrandProps = {\r\n href: logo.outterLink,\r\n target: \"_blank\",\r\n };\r\n }\r\n return (\r\n \r\n \r\n {/* Collapse */}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n navLink: { fontWeight: \"bold\" },\r\n icon: { maxWidth: 40, float: `left`, display: `block`, float: `left` },\r\n navbar: { overflowY: `visible`, zIndex: 1000 },\r\n};\r\n\r\nexport default Sidebar;\r\n","import DataService from \"./DataService\";\r\nimport StorageService from \"../StorageService\";\r\n\r\nconst { default: Constants } = require(\"../Constants\");\r\n\r\nconst ApiService = {\r\n getUrl: (path) => {\r\n var url = window.location.host.toLocaleLowerCase().startsWith(\"localhost\") ? Constants.api.urls.development : Constants.api.urls.production;\r\n\r\n return `${url}${path}`\r\n },\r\n getHeaders: () => {\r\n const headers = {\r\n \"Content-Type\": \"application/json\"\r\n };\r\n\r\n const user = StorageService.get(StorageService.keys.user)\r\n if (user && user.token) {\r\n headers[`Authorization`] = `Bearer ${user.token}`;\r\n }\r\n\r\n return headers;\r\n },\r\n post: async (url, data, onError) => {\r\n const apiUrl = ApiService.getUrl(url);\r\n var request = new Request(apiUrl, {\r\n method: \"POST\",\r\n body: JSON.stringify(data),\r\n headers: ApiService.getHeaders(),\r\n });\r\n\r\n const resp = await fetch(request);\r\n if (resp.status === 200) {\r\n return await resp.json();\r\n }\r\n if (onError) onError();\r\n },\r\n put: async (url, data, onError) => {\r\n const apiUrl = ApiService.getUrl(url);\r\n var request = new Request(apiUrl, {\r\n method: \"PUT\",\r\n body: JSON.stringify(data),\r\n headers: ApiService.getHeaders(),\r\n });\r\n\r\n const resp = await fetch(request);\r\n if (resp.status === 200) {\r\n return await resp.json();\r\n }\r\n if (onError) onError();\r\n },\r\n delete: async (url, data, onError) => {\r\n const apiUrl = ApiService.getUrl(url);\r\n var request = new Request(apiUrl, {\r\n method: \"DELETE\",\r\n body: JSON.stringify(data),\r\n headers: ApiService.getHeaders(),\r\n });\r\n\r\n const resp = await fetch(request);\r\n if (resp.status === 200) {\r\n return await resp.json();\r\n }\r\n if (onError) onError();\r\n },\r\n get: async (url, data, onError) => {\r\n let qs = \"\";\r\n\r\n for (var prop in data) {\r\n qs += `${prop}=${data[prop]}&`;\r\n }\r\n\r\n const apiUrl = `${ApiService.getUrl(url)}?${qs}`;\r\n var request = new Request(apiUrl, {\r\n method: \"GET\",\r\n headers: ApiService.getHeaders(),\r\n });\r\n\r\n const resp = await fetch(request);\r\n return await resp.json();\r\n },\r\n\r\n fromStorage: async (url, onError) => {\r\n var user = StorageService.get(StorageService.keys.user);\r\n\r\n if (user) {\r\n const apiUrl = `${Constants.api.storageUrl}${user.organisationId}/${url}?${user.sasToken}`;\r\n var request = new Request(apiUrl, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n });\r\n\r\n const resp = await fetch(request);\r\n if (resp.status === 401 || resp.status === 403) {\r\n //get new token\r\n const tokenJson = await ApiService.get(`auth/refresh-storage-token`);\r\n\r\n if (tokenJson && tokenJson.sasToken) {\r\n user.sasToken = tokenJson.sasToken;\r\n StorageService.set(StorageService.keys.user, user);\r\n return await ApiService.fromStorage(url, onError);\r\n }\r\n }\r\n return await resp.json();\r\n } else {\r\n onError && onError();\r\n }\r\n },\r\n};\r\n\r\nexport default ApiService;\r\n","import ApiService from \"./ApiService\";\r\nimport StorageService from \"infrastructure/StorageService\";\r\nimport moment from 'moment';\r\n\r\nexport default {\r\n periods: async () => {\r\n let periods = StorageService.get(StorageService.keys.periods);\r\n if (periods) return periods;\r\n\r\n //get periods\r\n\r\n await ApiService.fromStorage(`timetable.json`).then((json) => {\r\n StorageService.set(StorageService.keys.periods, json);\r\n periods = json;\r\n });\r\n return periods;\r\n },\r\n terms: async () => {\r\n let terms = StorageService.get(StorageService.keys.terms);\r\n if (terms) return terms;\r\n\r\n //get terms\r\n\r\n await ApiService.fromStorage(`lab-bookings/terms.json`)\r\n .then((json) => {\r\n StorageService.set(StorageService.keys.terms, json.terms);\r\n terms = json.terms;\r\n })\r\n .catch(() => {\r\n StorageService.set(StorageService.keys.terms, \"\");\r\n });\r\n return terms;\r\n },\r\n leadTime: async () => {\r\n let leadTime = StorageService.get(StorageService.keys.leadTime);\r\n if (leadTime) return leadTime;\r\n\r\n //get terms\r\n\r\n await ApiService.fromStorage(`lab-bookings/leadtime.json`)\r\n .then((json) => {\r\n StorageService.set(StorageService.keys.leadTime, json.leadTime);\r\n leadTime = json.leadTime;\r\n })\r\n .catch(() => {\r\n StorageService.set(StorageService.keys.leadTime, \"3\");\r\n });\r\n return leadTime;\r\n },\r\n labBookings: {\r\n campuses: async () => {\r\n let data = StorageService.get(StorageService.keys.labBookingCampuses);\r\n if (data) return data;\r\n\r\n //get periods\r\n\r\n await ApiService.fromStorage(`lab-bookings/campuses.json`).then(\r\n (json) => {\r\n StorageService.set(StorageService.keys.labBookingCampuses, json);\r\n data = json;\r\n }\r\n );\r\n return data;\r\n },\r\n riskTemplate: async () => {\r\n let data = StorageService.get(StorageService.keys.labBookingRiskTemplate);\r\n if (data) return data;\r\n\r\n //get periods\r\n\r\n await ApiService.fromStorage(`lab-bookings/risktemplate.json`).then(\r\n (json) => {\r\n StorageService.set(StorageService.keys.labBookingRiskTemplate, json);\r\n data = json;\r\n }\r\n );\r\n return data;\r\n },\r\n },\r\n\r\n addBusinessDays: (date, days) => {\r\n var dt = new Date(date);\r\n dt.setHours(0,0,0,0);\r\n days = days+1;\r\n var d = moment(dt).add(Math.floor(days / 5) * 7, \"d\");\r\n var remaining = days % 5;\r\n while (remaining) {\r\n d.add(1, \"d\");\r\n if (d.day() !== 0 && d.day() !== 6) remaining--;\r\n }\r\n return d;\r\n },\r\n};\r\n","import React from \"react\";\r\nimport DOMPurify from 'dompurify'\r\n// reactstrap components\r\nimport {\r\n Button,\r\n\r\n Modal,\r\n} from \"reactstrap\";\r\n\r\nexport default ({title, content, show, onConfirm, onCancel, confirmText}) => {\r\n \r\n\r\n return (\r\n <>\r\n\r\n \r\n
\r\n
\r\n {title}\r\n
\r\n \r\n ×\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n Cancel\r\n \r\n \r\n
\r\n \r\n \r\n );\r\n}\r\n","import React, { useState, useEffect, useRef, useContext } from \"react\";\r\nimport queryString from 'query-string'\r\nimport moment from \"moment\";\r\nimport { UncontrolledTooltip } from \"reactstrap\";\r\nimport _ from \"lodash\";\r\nimport \"./Timetable.scss\";\r\nimport DataService from \"infrastructure/Services/DataService\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\nimport UserContext from \"context/UserContext\";\r\nimport AlertModal from \"components/Common/AlertModal\";\r\nimport StorageService from 'infrastructure/StorageService';\r\nconst cellPadding = 10;\r\nconst bookingHeight = 20;\r\nlet isMouseDown = false;\r\nexport default (props) => {\r\n const user = useContext(UserContext);\r\n const [periods, setPeriods] = useState([]);\r\n const [startHour, setStartHour] = useState(8);\r\n const [endHour, setEndHour] = useState(17);\r\n const [bookings, setBookings] = useState([]);\r\n const [days, setDays] = useState([]);\r\n const [now, setNow] = useState(new Date());\r\n const [newBooking, setNewBooking] = useState(null);\r\n const newBookingRef = React.useRef(newBooking);\r\n const [completeBooking, setCompleteBooking] = useState(null);\r\n const [showAlertModal, setShowAlertModal] = useState(false);\r\n const [cutOff, setCutoff] = useState(new moment().add(3, \"days\").set({hour:0,minute:0,second:0,millisecond:0}));\r\n\r\n const setIsMouseDown = (v) => { isMouseDown = v; }\r\n const history = useHistory();\r\n const table = useRef(null);\r\n const containerRef = useRef(null);\r\n const [terms, setTerms] = useState(null);\r\n\r\n \r\n useEffect(() => {\r\n if (completeBooking) {\r\n const search = queryString.stringify(completeBooking);\r\n history.push({ pathname: `/bookings/create`, search });\r\n }\r\n }, [completeBooking]);\r\n\r\n useEffect(() => {\r\n loadData();\r\n const timer = setInterval(() => {\r\n setNow(new Date());\r\n }, 10000);\r\n\r\n calculateCutOff();\r\n\r\n return () => clearInterval(timer);\r\n }, []);\r\n\r\n useEffect(() => {\r\n const _bookings = props.bookings || [];\r\n _bookings.forEach((booking) => {\r\n const _bookingDate = new Date(booking.date);\r\n booking.date = _bookingDate;\r\n booking.dayNumber = _bookingDate.getDay();\r\n booking.periodNumbers = [];\r\n if (!booking.colour) {\r\n booking.colour = \"#17a1eb\";\r\n }\r\n for (var i = booking.startPeriod; i <= booking.endPeriod; i++) {\r\n booking.periodNumbers.push(i);\r\n }\r\n });\r\n setBookings(_bookings);\r\n }, [props.bookings]);\r\n\r\n const calculateCutOff = async (date) => {\r\n if (!user.isAdmin){\r\n const leadTime = await DataService.leadTime();\r\n var dt = (date || new Date());\r\n dt.setHours(0,0,0,0);\r\n var newCutOff = DataService.addBusinessDays(dt, leadTime);\r\n \r\n setCutoff(newCutOff.set({hour:0,minute:0,second:0,millisecond:0}));\r\n }else\r\n setCutoff(new moment().add(-1, \"years\").set({hour:0,minute:0,second:0,millisecond:0}));\r\n };\r\n\r\n const loadData = async () => {\r\n const tempPeriods = await DataService.periods();\r\n const tempTerms = await DataService.terms();\r\n if (!user.isAdmin){\r\n await calculateCutOff();\r\n }\r\n setTerms(tempTerms);\r\n\r\n tempPeriods.forEach((period) => {\r\n period.startHour = period.startTime.substring(0, 2);\r\n period.startMinute = period.startTime.substring(3, 5);\r\n period.endHour = period.endTime.substring(0, 2);\r\n period.endMinute = period.endTime.substring(3, 5);\r\n });\r\n\r\n setPeriods(tempPeriods || []);\r\n\r\n const firstPeriod = tempPeriods.sort(\r\n (a, b) => parseFloat(a.startHour) - parseFloat(b.startHour)\r\n )[0];\r\n\r\n const _startHour = firstPeriod ? firstPeriod.startHour : 0;\r\n\r\n const lastPeriod = tempPeriods.sort(\r\n (a, b) => parseFloat(b.endHour) - parseFloat(a.endHour)\r\n )[0];\r\n const _endHour = lastPeriod ? parseInt(lastPeriod.endHour) + 1 : 1;\r\n const _days = [1, 2, 3, 4, 5, 6, 7].filter(\r\n (x) => tempPeriods.findIndex((p) => p.dayNumber == x) > -1\r\n );\r\n setStartHour(_startHour);\r\n setEndHour(_endHour);\r\n setDays(_days);\r\n };\r\n\r\n const getDayName = (dayIndex) => {\r\n const dayNames = [\"Mon\", \"Tues\", \"Weds\", \"Thurs\", \"Fri\", \"Sat\", \"Sun\"];\r\n return dayNames[dayIndex - 1];\r\n };\r\n\r\n const getHeight = (period) => {\r\n const minutes =\r\n (period.endHour - period.startHour) * 60 +\r\n (period.endMinute - period.startMinute);\r\n return minutes * 6;\r\n };\r\n\r\n const getWidth = (period) => {\r\n const minutes = getHeight(period);\r\n const divider = period.isBreak === true ? 2 : 1;\r\n\r\n const width = (minutes / divider);\r\n\r\n return props.zoomLevel > 0 ? width / props.zoomLevel : width * (0 - props.zoomLevel);\r\n };\r\n\r\n const editBooking = async (e, booking) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n //get booking\r\n const tempPeriods = await DataService.periods();\r\n const campuses = await DataService.labBookings.campuses();\r\n const bookingDate = new moment(booking.date).format(\"YYYY-MM-DD\");\r\n ApiService.get(`booking/lab/${bookingDate}/${booking.id}`)\r\n .then(resp => {\r\n //get periods\r\n var startPeriod = tempPeriods.find(m => m.id === resp.startPeriod);\r\n var endPeriod = tempPeriods.find(m => m.id === resp.endPeriod);\r\n var campus = campuses.find(m => m.id === resp.campusId);\r\n resp.startPeriod = startPeriod.order;\r\n resp.campus = campus.name;\r\n var startTime = startPeriod.startTime.split(':');\r\n resp.startHour = startTime[0];\r\n resp.startMinute = startTime[1];\r\n resp.startPeriodName = startPeriod.name;\r\n\r\n var endtime = endPeriod.startTime.split(':');\r\n resp.endHour = endtime[0];\r\n resp.endMinute = endtime[1];\r\n resp.endPeriod = endPeriod.order;\r\n resp.endPeriodName = endPeriod.name;\r\n resp.type = 'lab';\r\n props.onNewBooking(resp);\r\n })\r\n\r\n }\r\n\r\n const createNewBooking = (day, period, isClick) => {\r\n // let localCutOff = cutOff;\r\n // localCutOff.set({hour:0,minute:0,second:0,millisecond:0});\r\n\r\n const bookingDate = new moment(props.startDate)\r\n .add(day, \"days\")\r\n .set({hour:0,minute:0,second:0,millisecond:0});\r\n\r\n console.log(bookingDate.format('yyyy-MM-DD hh:mm:ss'))\r\n console.log(cutOff.format('yyyy-MM-DD hh:mm:ss'))\r\n\r\n \r\n const diff = bookingDate.diff(cutOff, 'days');\r\n\r\nconsole.log(diff);\r\n if (diff < 0) return;\r\n\r\n document.addEventListener(\"mouseup\", handleMouseUp);\r\n\r\n setNewBooking(() => {\r\n setIsMouseDown(true);\r\n var newState = {\r\n dayNumber: day,\r\n startPeriod: period,\r\n endPeriod: period,\r\n originalStart: period,\r\n periodNumbers: [period],\r\n colour: \"#c00\",\r\n };\r\n newBookingRef.current = newState;\r\n return newState;\r\n });\r\n };\r\n\r\n const mouseOverBooking = (e) => {\r\n e.stopPropagation();\r\n };\r\n\r\n const mouseOverPeriod = _.debounce((e, day, period) => {\r\n if (\r\n !isMouseDown ||\r\n !newBooking ||\r\n !day ||\r\n !period ||\r\n !e ||\r\n !e.target ||\r\n !e.target.hasAttribute(\"data-period\")\r\n )\r\n return;\r\n\r\n\r\n if (newBooking.dayNumber === day) {\r\n setNewBooking((prevState) => {\r\n var newState = { ...prevState };\r\n\r\n if (period >= prevState.startPeriod) {\r\n newState.endPeriod = period;\r\n } else {\r\n newState.startPeriod = period;\r\n }\r\n\r\n newState.periodNumbers = [];\r\n for (var i = newState.startPeriod; i <= newState.endPeriod; i++) {\r\n newState.periodNumbers.push(i);\r\n }\r\n newBookingRef.current = newState;\r\n return newState;\r\n });\r\n }\r\n }, 10);\r\n\r\n const handleMouseUp = () => {\r\n\r\n\r\n document.removeEventListener(\"mouseup\", handleMouseUp);\r\n setIsMouseDown(false);\r\n\r\n if (terms !== '') {\r\n setShowAlertModal(true);\r\n } else {\r\n handleBookingConfirm();\r\n }\r\n\r\n };\r\n\r\n const handleBookingCancel = () => {\r\n setShowAlertModal(false);\r\n setNewBooking(null);\r\n }\r\n\r\n const handleBookingConfirm = () => {\r\n setShowAlertModal(false);\r\n const bookingObject = {};\r\n const current = { ...newBookingRef.current };\r\n const bookingDate = new moment(props.startDate)\r\n .add(current.dayNumber, \"days\")\r\n .format(\"YYYY-MM-DD\");\r\n bookingObject.bookingDate = bookingDate;\r\n //get startPeriod\r\n const startPeriodObject = periods.find(x => x.dayNumber === current.dayNumber && x.order === current.startPeriod);\r\n const endPeriodObject = periods.find(x => x.dayNumber === current.dayNumber && x.order === current.endPeriod);\r\n bookingObject.startPeriod = startPeriodObject.id;\r\n bookingObject.endPeriod = endPeriodObject.id;\r\n bookingObject.startPeriodName = startPeriodObject.name;\r\n bookingObject.endPeriodName = endPeriodObject.name;\r\n bookingObject.type = props.type || \"lab\";\r\n if (props.onNewBooking) {\r\n props.onNewBooking(bookingObject);\r\n setNewBooking(null);\r\n }\r\n };\r\n\r\n const compare = (arr1, arr2) => {\r\n return arr1.reduce((a, c) => a + arr2.includes(c), 0);\r\n };\r\n\r\n const renderBooking = (booking) => {\r\n //get width:\r\n let width = 0;\r\n\r\n for (var i = booking.startPeriod; i <= booking.endPeriod; i++) {\r\n var bookingPeriod = periods.find(\r\n (period) => period.dayNumber === booking.dayNumber && period.order === i\r\n );\r\n if (bookingPeriod) {\r\n width += getWidth(bookingPeriod);\r\n }\r\n }\r\n\r\n width =\r\n width -\r\n cellPadding * 2 +\r\n cellPadding * Math.max(0, booking.periodNumbers.length - 1);\r\n\r\n //const foundBookings = (booking.id ? bookings.filter(b => b.dayNumber == booking.dayNumber && booking.startPeriod != b.startPeriod && (b.periodNumbers.indexOf(booking.startPeriod) > -1)).length : 0);\r\n const foundBookings = (booking.id ? bookings.filter(b => b.dayNumber == booking.dayNumber && booking.startPeriod != b.startPeriod && booking.startPeriod < b.startPeriod && compare(booking.periodNumbers, b.periodNumbers) > 0).length : 0);\r\n\r\n let offsetHeight = (Math.max(foundBookings, 0) * 220) + 0;\r\n if (booking.id && foundBookings > 0)\r\n offsetHeight += 30;\r\n\r\n let d = booking.date;\r\n if (d)\r\n d.setHours(0,0,0, 0);\r\n const bookingDateMoment = new moment(d);\r\n\r\n return (\r\n {\r\n e.preventDefault();\r\n var dm = bookingDateMoment.format('yyyy-MM-DD');\r\n history.push(`/lab/booking/${dm}/${booking.id}`);\r\n }}\r\n >\r\n {booking.id && <>\r\n {(user.isAdmin || (booking.canEdit && bookingDateMoment >= cutOff)) &&\r\n editBooking(e, booking)}>}\r\n {booking.id && <>\r\n {booking.practicalName}
\r\n {booking.name}{booking.room}{booking.yearLevel}{booking.class}
\r\n {user.isAdmin && {booking.technicianNotes || '\\u00A0'}}}}\r\n \r\n );\r\n };\r\n\r\n const renderRow = (day) => {\r\n return renderRowPeriods(day);\r\n };\r\n\r\n const renderRowHeader = (day) => {\r\n return (\r\n
\r\n
\r\n
{getDayName(day)}
\r\n
\r\n \r\n {new moment(props.startDate).add(day, \"days\").format(\"dddd, LL\")}\r\n \r\n
\r\n );\r\n };\r\n\r\n const renderRowPeriods = (day) => {\r\n const periodDivs = [];\r\n periodDivs.push(renderRowHeader(day));\r\n const dayBookings = bookings.filter((booking) => booking.dayNumber === day);\r\n periods\r\n .filter((period) => period.dayNumber === day)\r\n .sort((a, b) => a.order - b.order)\r\n .forEach((period) => {\r\n const currentBookings = dayBookings.filter(\r\n (booking) => booking.startPeriodId === period.id\r\n );\r\n let offsetHeight = 0;\r\n let bookingOverlapsExistingBookings = false;\r\n\r\n if (newBooking) {\r\n for (var i = 0; i <= newBooking.periodNumbers.length - 1; i++) {\r\n const p = newBooking.periodNumbers[i];\r\n if (\r\n dayBookings.filter((b) => b.periodNumbers.includes(p)).length > 0\r\n ) {\r\n bookingOverlapsExistingBookings = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const overlapsPeriods =\r\n newBooking &&\r\n newBooking.dayNumber === day &&\r\n bookingOverlapsExistingBookings;\r\n\r\n offsetHeight = overlapsPeriods ? bookingHeight * 1.25 : 0;\r\n let periodStyle = { ...styles.period };\r\n\r\n if (now.getDay() === day) {\r\n const periodStartDate = new Date();\r\n periodStartDate.setHours(period.startHour);\r\n periodStartDate.setMinutes(period.startMinute);\r\n periodStartDate.setSeconds(0);\r\n\r\n const periodEndDate = new Date();\r\n periodEndDate.setHours(period.endHour);\r\n periodEndDate.setMinutes(period.endMinute);\r\n periodEndDate.setSeconds(0);\r\n // if (period.isBreak){\r\n // periodStyle = {...periodStyle, ...styles.breakPeriod};\r\n // }\r\n if (\r\n now.getDay() === day &&\r\n periodStartDate < now &&\r\n periodEndDate > now &&\r\n new moment(props.startDate).format(\"dddd, LL\") === new moment(new Date()).startOf(\"week\").format(\"dddd, LL\")\r\n ) {\r\n var difference =\r\n periodEndDate.getTime() - periodStartDate.getTime();\r\n var elapsed = periodEndDate.getTime() - now.getTime();\r\n var percentage = 100 - (elapsed * 100) / difference;\r\n periodStyle = {\r\n ...periodStyle,\r\n ...styles.now,\r\n backgroundPosition: `${percentage.toFixed(0)}%`,\r\n };\r\n }\r\n }\r\n periodDivs.push(\r\n {\r\n e.stopPropagation();\r\n if (e.target.hasAttribute('data-period'))\r\n createNewBooking(day, period.order, false);\r\n }}\r\n onMouseEnter={(e) => {\r\n e.persist();\r\n mouseOverPeriod(e, day, period.order);\r\n }}\r\n >\r\n \r\n {period.name}
{period.startTime} - {period.endTime}\r\n
\r\n \r\n
\r\n {newBooking &&\r\n newBooking.dayNumber === day &&\r\n newBooking.startPeriod === period.order &&\r\n renderBooking(newBooking)}\r\n
\r\n \r\n {currentBookings.map((booking) => renderBooking(booking))}\r\n \r\n \r\n );\r\n });\r\n\r\n return (\r\n \r\n {periodDivs}\r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {days.map(renderRow)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n table: {\r\n WebkitTouchCallout: \"none\",\r\n WebkitUserSelect: \"none\",\r\n KhtmlUserSelect: \"none\",\r\n MozUserSelect: \"none\",\r\n MsUserSelect: \"none\",\r\n userSelect: \"none\",\r\n maxWidth: \"100vw\",\r\n overflowX: \"scroll\",\r\n overflowY: \"none\",\r\n position: \"relative\",\r\n },\r\n tableBottom: {\r\n //borderBottom: \"1px solid #c0c0c0\",\r\n },\r\n booking: {\r\n borderRadius: 10,\r\n minHeight: \"20px\",\r\n padding: \"10px 10px\",\r\n color: '#fff',\r\n fontSize: 12,\r\n marginBottom: 5,\r\n cursor: \"pointer\",\r\n zIndex: 1,\r\n position: \"relative\",\r\n transition: \"width 0.3s ease-in-out\",\r\n maxHeight: 180,\r\n overflow: 'hidden'\r\n },\r\n now: {\r\n backgroundImage: \"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==)\",\r\n backgroundRepeat: \"repeat-y\",\r\n },\r\n periodHeader: {\r\n margin: \"0 10px 10px 0\",\r\n borderRadius: 6,\r\n backgroundColor: \"#fff\",\r\n minWidth: \"60px\",\r\n position: \"sticky\",\r\n padding: cellPadding,\r\n zIndex: 2,\r\n left: 0,\r\n minHeight: '160px',\r\n backgroundColor: \"#c0c0c0\",\r\n },\r\n period: {\r\n minHeight: \"160px\",\r\n margin: `0 ${cellPadding}px ${cellPadding}px 0`,\r\n borderRadius: 6,\r\n backgroundColor: \"#e0e0e0\",\r\n transition: 'all 0.2s ease-in-out'\r\n },\r\n breakPeriod: {\r\n backgroundColor: 'rgba(224, 224, 224, 0.8)'\r\n }\r\n};\r\n","import React, { useContext, useEffect, useState } from \"react\";\r\nimport moment from \"moment\";\r\nimport {\r\n Badge,\r\n Media,\r\n Table,\r\n} from \"reactstrap\";\r\nimport DataService from \"infrastructure/Services/DataService\";\r\nimport UserContext from \"context/UserContext\";\r\nexport default ({ bookings, history }) => {\r\n const [periods, setPeriods] = useState(null);\r\n const user = useContext(UserContext);\r\n const getData = async () => {\r\n const _periods = await DataService.periods();\r\n setPeriods(_periods);\r\n }\r\n useEffect(() => {\r\n getData();\r\n }, []);\r\n\r\n return (\r\n <>{periods && \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {user.isAdmin && }\r\n \r\n \r\n \r\n {bookings.sort(function (a, b) {\r\n return new Date(a.date) - new Date(b.date);\r\n }).map((booking) => {\r\n let periodString = `${booking.startPeriodName}`\r\n\r\n let bookingTime = `${booking.startHour}:${booking.startMinute}`;\r\n if (booking.startPeriod !== booking.endPeriod) {\r\n periodString += ` - ${booking.endPeriodName}`\r\n bookingTime += ` - ${booking.endHour}:${booking.endMinute}`;\r\n } else {\r\n bookingTime += ` - ${booking.endHour}:${booking.endMinute}`;\r\n }\r\n\r\n return {\r\n e.preventDefault()\r\n var dm = new moment(booking.date).format('yyyy-MM-DD');\r\n history.push(`/lab/booking/${dm}/${booking.id}`);\r\n }}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {user.isAdmin && }\r\n \r\n ;\r\n })}\r\n \r\n
\r\n DateTimeYearRoomStaffPractical NameTechnician Notes\r\n
\r\n
\r\n
\r\n \r\n \r\n {new moment(booking.date).format(\"dddd, LL\")}\r\n \r\n \r\n \r\n {periodString}
\r\n {bookingTime}\r\n
{booking.yearLevel}{booking.room}{booking.name}{booking.practicalName}{booking.technicianNotes}\r\n {\r\n e.preventDefault()\r\n var dm = new moment(booking.date).format('yyyy-MM-DD');\r\n history.push(`/lab/booking/${dm}/${booking.id}`);\r\n }}\r\n >\r\n \r\n \r\n
}\r\n );\r\n};\r\n","\r\nimport React from 'react';\r\nimport './Loader.scss';\r\nexport default (({size, className, color}) => {\r\n if (!size){\r\n size = `lg`;\r\n }\r\n if (!color){\r\n color = 'primary';\r\n }\r\n return
\r\n})","\r\nimport Loader from \"components/Common/Loader\";\r\nimport UserContext from \"context/UserContext\";\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\nimport React, { useContext, useEffect } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\n\r\n\r\n\r\nexport default ({ location, onCancel }) => {\r\n \r\n const userContext = useContext(UserContext);\r\nconst history = useHistory();\r\n useEffect(() => {\r\n const code = (location.search.match(/code=([^&]+)/) || [])[1];\r\n const state = (location.search.match(/state=([^&]+)/) || [])[1];\r\n const data = {code, state};\r\n\r\n ApiService.post(\"auth/oauth_token\", data, () => {\r\n onCancel(`Your login attempt was unsuccessful. Please try again.`)\r\n })\r\n .then(json => {\r\n userContext.login(json);\r\n history.push('/lab/bookings');\r\n });\r\n }, []);\r\n \r\n return
;\r\n };","import React, { useState, useEffect } from \"react\";\r\nimport moment from \"moment\";\r\nimport { UncontrolledPopover, PopoverBody } from \"reactstrap\";\r\nimport Datetime from \"react-datetime\";\r\nimport \"react-datetime/css/react-datetime.css\";\r\nimport \"./DateSelector.scss\";\r\nexport default ({ onDateChange, type, startDate }) => {\r\n const pickerType = type || 'day';\r\n const [openDatePicker, setOpenDatePicker] = useState(false);\r\n const [dates, setDates] = useState(null);\r\n\r\n useEffect(() => {\r\n\r\n setDate();\r\n\r\n }, []);\r\n useEffect(() => {\r\n\r\n setDate();\r\n\r\n }, [startDate]);\r\n const setDate = () => {\r\n var startOfWeek = startDate ? new moment(startDate).startOf('week') : new moment().startOf(\"week\");\r\n\r\n if (pickerType === `week`) {\r\n var endOfWeek = startDate ? new moment(startDate).endOf('week') : new moment().endOf(\"week\");\r\n setDates({\r\n startDate: startOfWeek,\r\n endDate: endOfWeek,\r\n });\r\n } else {\r\n setDates({\r\n startDate: startOfWeek.startOf(\"week\")\r\n });\r\n }\r\n }\r\n\r\n const handleDateChange = (d) => {\r\n const start = new moment(d).startOf(\"week\");\r\n const newDates = {\r\n startDate: start,\r\n };\r\n let end = null;\r\n if (pickerType === `week`) {\r\n end = new moment(d).endOf(\"week\");\r\n newDates.endDate = end;\r\n }\r\n\r\n\r\n setDates(newDates);\r\n setOpenDatePicker(false);\r\n onDateChange(start, end);\r\n };\r\n\r\n const prevWeek = () => {\r\n\r\n const start = new moment(startDate).startOf(\"week\").add(-1, 'weeks');\r\n handleDateChange(start);\r\n }\r\n const nextWeek = () => {\r\n const start = new moment(startDate).startOf(\"week\").add(1, 'weeks');\r\n handleDateChange(start);\r\n }\r\n\r\n return (\r\n <>\r\n {dates && (\r\n <>\r\n
Dates
\r\n
\r\n \r\n setOpenDatePicker(true)}\r\n >\r\n {dates.startDate.format(\"LL\")}{dates.endDate && <> - {dates.endDate.format(\"LL\")}}\r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n
\r\n setOpenDatePicker((prevstate) => !prevstate)}\r\n >\r\n \r\n \r\n \r\n \r\n\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\n\r\nconst styles = {\r\n icon: { width: 28, float: `left`, display: `block`, float: `left` }\r\n};","import React from \"react\";\r\nimport { Row, Col } from \"reactstrap\";\r\n\r\nexport default ({ sectionName, title, icon, onCloseButtonPress }) => {\r\n return (\r\n \r\n \r\n \r\n\r\n {sectionName}\r\n

{title}

\r\n \r\n
\r\n );\r\n};\r\n\r\nconst styles = {\r\n icon: { maxWidth: 40, float: `left`, display: `block` },\r\n};\r\n","import React from \"react\";\r\nimport { Col } from \"reactstrap\";\r\n\r\nexport default ({ label, children, columns, className }) => {\r\n columns = columns || 2;\r\n return (\r\n \r\n \r\n {children}\r\n \r\n );\r\n};\r\n","import React from 'react';\r\nimport { Col, Row, Table } from 'reactstrap';\r\n\r\nexport default (() => {\r\n return <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n Likelyhood
\r\n (likelihood of harm caused given the circumstances)\r\n
\r\n Consequences\r\n
\r\n Insignificant
\r\n (no injuries)\r\n
\r\n Minor
\r\n 1st aid/immediate containment\r\n
\r\n Moderate
\r\n Medical treatment/ release contained with outside help\r\n
\r\n Major
\r\n Extensive injuries/ off site release with no detrimental effect\r\n
\r\n Catastrophic
\r\n Death / toxic release off site with detrimental effect\r\n
A
Almost certain
HighHighExtremeExtremeExtreme
B
likely
ModerateHighHighExtremeExtreme
C
possible
LowModerateHighExtremeExtreme
D
unlikely
LowLowModerateHighExtreme
E
rare
LowLowModerateHighHigh
\r\n \r\n});\r\n\r\nconst styles = {\r\n cell: {backgroundColor: `#ced4da`, padding: 16, width: `16.66%`, margin: 10, borderRadius: 6, textTransform: `capitalize`},\r\n high: {color: `#fff`, padding: 16, width: `16.66%`, backgroundColor: `#dc6835`, margin: 10, borderRadius: 6},\r\n extreme: {color: `#fff`, padding: 16, width: `16.66%`, backgroundColor: `#dc3545`, margin: 10, borderRadius: 6},\r\n low: {color: `#fff`, padding: 16, width: `16.66%`, backgroundColor: `#28a745`, margin: 10, borderRadius: 6},\r\n moderate: {color: `#fff`, padding: 16, width: `16.66%`, backgroundColor: `#ffc107`, margin: 10, borderRadius: 6},\r\n}","import React from \"react\";\r\nimport { Row, Col, Input, Label } from \"reactstrap\";\r\nimport FormStepHeader from \"../../../../components/Common/FormStepHeader\";\r\nimport FormColumn from \"../../../../components/Common/FormColumn\";\r\nimport RiskMatrix from \"components/Common/RiskMatrix\";\r\nexport default ({ booking, riskTemplate, onUpdateValue, currentStep, index }) => {\r\n\r\n\r\n const setListValue = (list, name, value) => {\r\n\r\n if (!booking.risks) {\r\n const newValue = { id: riskTemplate.id, name: riskTemplate.name };\r\n newValue[list] = [{ name, value }]\r\n onUpdateValue(riskTemplate, newValue);\r\n return;\r\n }\r\n\r\n const currentRiskIndex = booking.risks.findIndex(x => x.id === riskTemplate.id);\r\n if (currentRiskIndex > -1) {\r\n const currentRisk = booking.risks[currentRiskIndex];\r\n\r\n if (currentRisk[list] == null) {\r\n currentRisk[list] = [{ name, value }]\r\n onUpdateValue(riskTemplate, currentRisk);\r\n }\r\n\r\n const currentHazardIndex = currentRisk[list].findIndex(x => x.name === name);\r\n if (currentHazardIndex > -1) {\r\n currentRisk[list][currentHazardIndex].value = value;\r\n } else {\r\n currentRisk[list].push({ name, value });\r\n }\r\n\r\n onUpdateValue(riskTemplate, currentRisk);\r\n } else {\r\n const newValue = { id: riskTemplate.id, name: riskTemplate.name };\r\n newValue[list] = [{ name, value }]\r\n onUpdateValue(riskTemplate, newValue);\r\n }\r\n }\r\n const toTitleCase = (str) => {\r\n return str.replace(\r\n /\\w\\S*/g,\r\n function(txt) {\r\n return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();\r\n }\r\n );\r\n }\r\n const setNoteValue = (value) => {\r\n\r\n if (!booking.risks) {\r\n const newValue = { id: riskTemplate.id, name: riskTemplate.name, notes: value };\r\n\r\n onUpdateValue(riskTemplate, newValue);\r\n return;\r\n }\r\n\r\n const currentRiskIndex = booking.risks.findIndex(x => x.id === riskTemplate.id);\r\n if (currentRiskIndex > -1) {\r\n const currentRisk = booking.risks[currentRiskIndex];\r\n currentRisk.notes = value;\r\n\r\n onUpdateValue(riskTemplate, currentRisk);\r\n } else {\r\n const newValue = { id: riskTemplate.id, name: riskTemplate.name, notes: value };\r\n onUpdateValue(riskTemplate, newValue);\r\n }\r\n }\r\n const getListValue = (list, name) => {\r\n if (!booking.risks) return null;\r\n\r\n const currentRiskIndex = booking.risks.findIndex(x => x.id === riskTemplate.id);\r\n\r\n if (currentRiskIndex < 0) return null;\r\n\r\n const currentRisk = booking.risks[currentRiskIndex];\r\n\r\n if (currentRisk[list] == null) return null;\r\n\r\n\r\n var currentHazardIndex = currentRisk[list].findIndex(x => x.name === name);\r\n if (currentHazardIndex < 0) return null;\r\n\r\n return currentRisk[list][currentHazardIndex].value;\r\n }\r\n\r\n const renderHazards = riskTemplate.hazards.map((hazard) => (\r\n \r\n \r\n {hazard.name}\r\n \r\n\r\n \r\n setListValue('hazards', hazard.name, e.target.value)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ));\r\n\r\n const renderControlMethods = riskTemplate.controlMeasures.map((method) => (\r\n \r\n
\r\n setListValue('controlMeasures', method.name, e.target.checked)}\r\n />\r\n \r\n
\r\n \r\n ));\r\n\r\n\r\n\r\n return (<>\r\n
\r\n

{`${toTitleCase(riskTemplate.name)} Risks`}

\r\n \r\n \r\n \r\n \r\n \r\n {renderHazards}\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n {renderControlMethods}\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n","import React, { useEffect, useState, useContext } from \"react\";\r\nimport moment from \"moment\";\r\nimport FormColumn from \"../../../../components/Common/FormColumn\";\r\nimport FormStepHeader from \"../../../../components/Common/FormStepHeader\";\r\nimport Select from \"react-select\";\r\nimport Creatable from \"react-select/creatable\";\r\nimport DataService from \"infrastructure/Services/DataService\";\r\nimport Datetime from 'react-datetime';\r\nimport UserContext from \"context/UserContext\";\r\nimport {\r\n Col,\r\n Row,\r\n Input\r\n} from \"reactstrap\";\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\nexport default ({ booking, onUpdateValues, currentStep, index }) => {\r\n const user = useContext(UserContext);\r\n const [quantities, setQuantities] = useState([]);\r\n const [cutOff, setCutoff] = useState(new moment().add(3, \"days\"));\r\n const [data, setData] = useState(null);\r\n const [periodData, setPeriodData] = useState();\r\n const [periods, setPeriods] = useState();\r\n const [isNewPractical, setIsNewPractical] = useState(false);\r\n const [savedBookings, setSavedBookings] = useState(null);\r\n const [users, setUsers] = useState(null);\r\n useEffect(() => {\r\n const newQuantities = [];\r\n for (var i = 1; i <= 100; i++) {\r\n newQuantities.push({ value: i, label: i });\r\n }\r\n\r\n setQuantities(newQuantities);\r\n getData();\r\n\r\n if (booking && booking.id) {\r\n booking.newBookingDate = booking.bookingDate;\r\n }\r\n\r\n if (user.isAdmin){\r\n ApiService.get('users')\r\n .then(resp => {\r\n setUsers(resp.items);\r\n })\r\n }\r\n }, []);\r\n\r\n useEffect(() => {\r\n\r\n }, [booking]);\r\n\r\n const calculateCutOff = async (date) => {\r\n if (!user.isAdmin){\r\n const leadTime = await DataService.leadTime();\r\n var newCutOff = DataService.addBusinessDays(date || new Date(), leadTime);\r\n return newCutOff;\r\n }\r\n return new moment().add(-1, \"years\");\r\n };\r\n\r\n const getData = async () => {\r\n const campusData = await DataService.labBookings.campuses();\r\n\r\n //const leadTime = await DataService.leadTime();\r\n var newCutOff = await calculateCutOff();\r\n setCutoff(newCutOff);\r\n\r\n const newData = { campuses: campusData };\r\n if (campusData.length === 1)\r\n onUpdateValues({ campusId: campusData[0].id, campusName: campusData[0].name });\r\n setData(newData);\r\n\r\n const p = await DataService.periods();\r\n setPeriodData(p);\r\n bindPeriods(p);\r\n\r\n\r\n ApiService.get(`savedbookings/lab/`)\r\n .then(resp => {\r\n setSavedBookings(resp.items);\r\n })\r\n };\r\n\r\n const setSavedPractical = (id) => {\r\n if (!id) {\r\n onUpdateValue(\"attachments\", null);\r\n onUpdateValue(\"risks\", null);\r\n onUpdateValue(\"notes\", null);\r\n onUpdateValue('practicalId', null);\r\n onUpdateValue(\"technicianAssistanceRequired\", null);\r\n return;\r\n }\r\n\r\n var savedPractical = savedBookings.find(x => x.id === id);\r\n if (!savedPractical) {\r\n onUpdateValue(\"attachments\", null);\r\n onUpdateValue(\"risks\", null);\r\n onUpdateValue(\"notes\", null);\r\n onUpdateValue('practicalId', null);\r\n onUpdateValue(\"technicianAssistanceRequired\", null);\r\n return;\r\n }\r\n\r\n ApiService.get(`savedbooking/lab/${id}`, { personalStore: savedPractical.isUser }).then(resp => {\r\n onUpdateValue(\"attachments\", resp.attachments);\r\n onUpdateValue(\"risks\", resp.risks);\r\n onUpdateValue(\"notes\", resp.notes);\r\n onUpdateValue('practicalId', id);\r\n onUpdateValue('bookReference', resp.bookReference);\r\n onUpdateValue(\"technicianAssistanceRequired\", resp.technicianAssistanceRequired);\r\n })\r\n }\r\n\r\n const bindPeriods = (pd) => {\r\n const dayPeriods = (pd) && (pd).filter(x => x.dayNumber == new Date(booking.newBookingDate).getDay()).map((x) => {\r\n return { value: x.order, label: x.name };\r\n });\r\n\r\n setPeriods(dayPeriods);\r\n }\r\n\r\n const onUpdateValue = (prop, value) => {\r\n const args = {};\r\n args[prop] = value;\r\n\r\n onUpdateValues(args)\r\n }\r\n\r\n const rooms = (data && data.campuses.find(x => x.id === booking.campusId)?.rooms || []).map((x) => {\r\n return { value: x, label: x };\r\n });\r\n\r\n const campuses = data && data.campuses.map((x) => {\r\n return { value: x.id, label: x.name };\r\n });\r\n\r\n const yearLevels = (data && data.campuses.find(x => x.id === booking.campusId)?.yearLevels || []).map((x) => {\r\n return { value: x, label: x };\r\n })\r\n\r\n const classes = (data && data.campuses.find(x => x.id === booking.campusId)?.classes || []).filter(x => x.yearLevel === booking.yearLevel).map((x) => {\r\n return { value: x.name, label: x.name };\r\n })\r\n\r\n const usersValue = (users || []).map((x) => {\r\n return { value: x.id, label: x.name };\r\n })\r\n\r\n const practicals = savedBookings && savedBookings.filter(x => x.yearLevel === booking.yearLevel).map((x) => {\r\n return { value: x.id, label: `${x.name} (${x.year} - ${x.userName})` };\r\n });\r\n\r\n let className = `step`;\r\n\r\n if (currentStep < index) {\r\n className += ` next`;\r\n } else if (currentStep > index) {\r\n className += ` prev`;\r\n } else {\r\n className += ` current`;\r\n }\r\n\r\n var valid = function (current) {\r\n if (user.isAdmin) return true;\r\n \r\n return current.isAfter(cutOff);\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n {data && (\r\n <>\r\n \r\n \r\n
Date
\r\n {(!booking.id) ?\r\n

{new moment(booking.bookingDate).format(\"dddd, LL\")}

:\r\n {\r\n const newBookingDate = e.toDate();\r\n const newBookingDay = newBookingDate.getDay();\r\n const currentBookingDay = new Date(booking.bookingDate).getDay();\r\n\r\n\r\n\r\n const currentStartPeriod = periodData.find(x => x.order == booking.startPeriod && x.dayNumber == currentBookingDay);\r\n const currentEndPeriod = periodData.find(x => x.order == booking.endPeriod && x.dayNumber == currentBookingDay);\r\n\r\n\r\n const dayPeriods = periodData.filter(x => x.dayNumber == new Date(newBookingDate).getDay()).map((x) => {\r\n return { value: x.order, label: x.name };\r\n });\r\n\r\n setPeriods(dayPeriods);\r\n\r\n let newStartPeriod = periodData.find(x => x.dayNumber == newBookingDay && x.order == currentStartPeriod.order);\r\n\r\n if (newStartPeriod == null) {\r\n newStartPeriod = periodData.filter(x => x.dayNumber == newBookingDay)[0];\r\n }\r\n\r\n let newEndPeriod = periodData.find(x => x.dayNumber == newBookingDay && x.order == currentEndPeriod.order);\r\n if (newEndPeriod == null) {\r\n newEndPeriod = newStartPeriod;\r\n }\r\n\r\n booking.startPeriod = newStartPeriod.id;\r\n booking.endPeriod = newEndPeriod.id;\r\n\r\n onUpdateValues({ newBookingDate: e.toISOString() })\r\n onUpdateValue(\"startPeriod\", newStartPeriod.order)\r\n onUpdateValue(\"startPeriodId\", newStartPeriod.id)\r\n onUpdateValue(\"endPeriod\", newEndPeriod.order)\r\n onUpdateValue(\"endPeriodId\", newEndPeriod.id)\r\n\r\n\r\n }} />}\r\n \r\n \r\n
Time
\r\n {booking.id && periods ? \r\n option.value === booking.startPeriod)}\r\n onChange={(element) => {\r\n onUpdateValue(\"startPeriod\", element.value)\r\n const startPeriod = periodData.find(x => x.order == element.value && x.dayNumber == new Date(booking.newBookingDate).getDay());\r\n onUpdateValue(\"startPeriodId\", startPeriod.id)\r\n if (element.value > booking.endPeriod) {\r\n onUpdateValue(\"endPeriod\", element.value)\r\n const endPeriod = periodData.find(x => x.order == element.value && x.dayNumber == new Date(booking.newBookingDate).getDay());\r\n onUpdateValue(\"endPeriodId\", endPeriod.id)\r\n }\r\n\r\n }}\r\n > x.value >= booking.startPeriod)}\r\n value={periods.filter(option => option.value === booking.endPeriod)}\r\n onChange={(element) => {\r\n onUpdateValue(\"endPeriod\", element.value);\r\n const endPeriod = periodData.find(x => x.order == element.value && x.dayNumber == new Date(booking.newBookingDate).getDay());\r\n onUpdateValue(\"endPeriodId\", endPeriod.id)\r\n }}\r\n >\r\n :

\r\n {booking.startPeriodName}\r\n {booking.endPeriodName &&\r\n booking.endPeriodName != booking.startPeriodName && (\r\n <> - {booking.endPeriodName}\r\n )}\r\n

}\r\n \r\n
\r\n \r\n {data.campuses.length > 1 && (\r\n \r\n \r\n onUpdateValue(\"campusId\", element.value)\r\n }\r\n >\r\n \r\n )}\r\n\r\n \r\n option.value === booking.room)}\r\n onChange={(element) => onUpdateValue(\"room\", element.value)}\r\n >\r\n \r\n\r\n \r\n \r\n option.value === booking.yearLevel)}\r\n isDisabled={!booking.room}\r\n onChange={(element) => {\r\n onUpdateValue(\"yearLevel\", element.value)\r\n onUpdateValue(\"class\", null);\r\n }\r\n }\r\n >\r\n \r\n \r\n option.value === booking.class)}\r\n isDisabled={!booking.yearLevel}\r\n onChange={(element) =>\r\n onUpdateValue(\"class\", element.value)\r\n }\r\n >\r\n \r\n \r\n {booking.id && user.isAdmin && <>\r\n \r\n \r\n x.value == (booking.bookingUserId || booking.userId))}\r\n onChange={(element) => {\r\n onUpdateValue(\"bookingUserId\", element.value)\r\n onUpdateValue(\"bookingUserName\", element.label)\r\n }}\r\n >\r\n \r\n\r\n }\r\n
\r\n\r\n \r\n {booking.id ? \r\n \r\n\r\n :\r\n \r\n {\r\n setIsNewPractical(e.__isNew__);\r\n //find practical\r\n if (e.__isNew__) {\r\n onUpdateValue('practicalName', e.label);\r\n setSavedPractical(null);\r\n }\r\n else {\r\n var saved = savedBookings.find(x => x.id === e.value);\r\n onUpdateValue('practicalName', saved.name);\r\n setSavedPractical(e.value);\r\n }\r\n\r\n }}\r\n >\r\n }\r\n\r\n {booking.practicalName && !booking.practicalName.isNew && (<>\r\n \r\n { onUpdateValues({ setsRequired: e.target.value }); }} />\r\n \r\n \r\n { onUpdateValues({ bookReference: e.target.value }); }} />\r\n \r\n )}\r\n {booking.practicalName && isNewPractical && (\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n \r\n \r\n onUpdateValues({ bookingNotes: e.target.value })} />\r\n \r\n \r\n \r\n )}
\r\n
\r\n );\r\n};\r\n\r\n","import React, { useEffect, useState, useMemo } from \"react\";\r\nimport FormColumn from \"../../../../components/Common/FormColumn\";\r\nimport FormStepHeader from \"../../../../components/Common/FormStepHeader\";\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\nimport { useDropzone } from \"react-dropzone\";\r\nimport moment from \"moment\";\r\nimport {\r\n Table,\r\n Col,\r\n Input,\r\n Row,\r\n\r\n} from \"reactstrap\";\r\n\r\n\r\nexport default ({ booking, onUpdateValues, currentStep, index }) => {\r\n const [quantities, setQuantities] = useState([]);\r\n const [data, setData] = useState(null);\r\nuseEffect(() => {\r\n\r\n}, [booking])\r\n const {\r\n acceptedFiles,\r\n getRootProps,\r\n getInputProps,\r\n isDragActive,\r\n isDragAccept,\r\n isDragReject,\r\n } = useDropzone({\r\n onDrop: files => updateFiles(files)\r\n });\r\n\r\n\r\n const onUpdateValue = (prop, value) => {\r\n const args = {};\r\n args[prop] = value;\r\n\r\n onUpdateValues(args)\r\n }\r\n\r\n const style = useMemo(\r\n () => ({\r\n ...styles.baseStyle,\r\n ...(isDragActive ? styles.activeStyle : {}),\r\n ...(isDragAccept ? styles.acceptStyle : {}),\r\n ...(isDragReject ? styles.rejectStyle : {}),\r\n }),\r\n [isDragActive, isDragReject, isDragAccept]\r\n );\r\n\r\n\r\n const files = acceptedFiles.map((file) => (\r\n \r\n {file.path}\r\n \r\n deleteUploadedFile(file.path)}>\r\n \r\n \r\n ));\r\n\r\n useEffect(() => {\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n\r\n }, [booking]);\r\n const toBase64 = file => new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = error => reject(error);\r\n });\r\n\r\n const deleteAttachment = (attachmentId) => {\r\n var date = new moment(booking.bookingDate).format(\"YYYY-MM-DD\");\r\n ApiService.delete(`booking/lab/${date}/${booking.id}/attachment/${attachmentId}`)\r\n .then(resp => {\r\n var attachments = booking.attachments;\r\n var aIndex = attachments.findIndex(x => x.id == attachmentId);\r\n attachments.splice(aIndex, 1);\r\n onUpdateValue('attachments', attachments);\r\n });\r\n }\r\n\r\n const deleteUploadedFile = async (name) => {\r\n const _files = booking.attachments && booking.attachments.length > 0 ? [...booking.attachments] : [];\r\n var aIndex = _files.findIndex(a => (a.file && a.file.length > 0) && a.name === name);\r\n if (!aIndex || aIndex < 0) {\r\n return\r\n }\r\n _files.splice(aIndex, 1);\r\n onUpdateValue('attachments', _files);\r\n\r\n }\r\n\r\n const updateFiles = async (files) => {\r\n const _files = booking.attachments && booking.attachments.length > 0 ? [...booking.attachments] : [];\r\n for (const f of files){\r\n var content = await toBase64(f);\r\n _files.push({\r\n mimeType: f.type,\r\n name: f.name,\r\n file: content\r\n })\r\n }\r\n onUpdateValue('attachments', _files);\r\n }\r\n\r\n let className = `step`\r\n\r\n if (currentStep < index) {\r\n className += ` next`;\r\n } else if (currentStep > index) {\r\n\r\n className += ` prev`;\r\n } else {\r\n className += ` current`;\r\n }\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n

\r\n Drag and drop some files here, or click to select files\r\n

\r\n
\r\n
\r\n
\r\n\r\n {booking.attachments &&\r\n <>\r\n \r\n \r\n \r\n File Name\r\n \r\n\r\n \r\n \r\n\r\n {booking.attachments.map(a => \r\n \r\n {a.name}\r\n \r\n {a.id ? \r\n <>{booking.id && deleteAttachment(a.id)}>} : \r\n deleteUploadedFile(a.name)}>}\r\n \r\n )}\r\n \r\n } \r\n
\r\n );\r\n};\r\n\r\n\r\nconst styles = {\r\n\r\n baseStyle: {\r\n flex: 1,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: \"20px\",\r\n marginTop: 20,\r\n marginBottom: 20,\r\n borderWidth: 2,\r\n borderRadius: 2,\r\n borderColor: \"#eeeeee\",\r\n borderStyle: \"dashed\",\r\n backgroundColor: \"#fafafa\",\r\n color: \"#bdbdbd\",\r\n outline: \"none\",\r\n transition: \"border .24s ease-in-out\",\r\n },\r\n activeStyle: {\r\n borderColor: \"#2196f3\",\r\n },\r\n acceptStyle: {\r\n borderColor: \"#00e676\",\r\n },\r\n\r\n rejectStyle: {\r\n borderColor: \"#ff1744\"\r\n }\r\n}\r\n\r\n\r\n","import React, { useEffect, useState, useMemo } from \"react\";\r\n\r\nimport FormStepHeader from \"../../../components/Common/FormStepHeader\";\r\n\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\n\r\nimport {\r\n Table,\r\n Col,\r\n Input,\r\n Row,\r\n\r\n} from \"reactstrap\";\r\nimport Loader from \"components/Common/Loader\";\r\n\r\n\r\nexport default ({ booking, onUpdateValues, currentStep, index, onBookingSaved, error, setError }) => {\r\n const save = () => { \r\n setError(false);\r\n if (booking.id){\r\n ApiService.put(`bookings/${booking.type}/${booking.id}`, booking)\r\n .then(resp => {\r\n if (resp && resp.id && resp.id != '00000000-0000-0000-0000-000000000000'){\r\n onBookingSaved();\r\n }else{\r\n setError(true);\r\n }\r\n })\r\n } else{ \r\n ApiService.post(`bookings/${booking.type}`, booking)\r\n .then(resp => {\r\n if (resp && resp.id && resp.id != '00000000-0000-0000-0000-000000000000'){\r\n onBookingSaved();\r\n }else{\r\n setError(true);\r\n }\r\n })\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n \r\n if (currentStep === index) save(); \r\n }, [currentStep]);\r\n\r\n\r\n let className = `step`\r\n\r\n if (currentStep < index){\r\n className += ` next`;\r\n }else if (currentStep > index){ \r\n className += ` prev`;\r\n }else{\r\n className += ` current`;\r\n\r\n }\r\n\r\n\r\n return (\r\n
\r\n \r\n \r\n {!error ? :
\r\n

There was an error saving your booking. Please check your details and try again.

\r\n\r\n
}\r\n
\r\n
\r\n );\r\n};\r\n\r\n","import React, { useEffect, useState, useMemo } from \"react\";\r\n\r\nimport { Col, Input, Row, Button, CarouselItem } from \"reactstrap\";\r\nimport RiskAssessmentStep from \"./RiskAssessmentStep\";\r\nimport DataService from \"infrastructure/Services/DataService\";\r\nimport Step1 from \"./Step1\";\r\nimport Step2 from \"./Step2\";\r\nimport \"../Form.scss\";\r\nimport FormColumn from \"../../../../components/Common/FormColumn\";\r\nimport Submit from \"../Submit\";\r\nimport AlertModal from \"components/Common/AlertModal\";\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\nimport moment from \"moment\";\r\nimport FormStepHeader from \"../../../../components/Common/FormStepHeader\";\r\nimport RiskMatrix from \"components/Common/RiskMatrix\";\r\n\r\nexport default ({ booking, onCloseButtonPress }) => {\r\n const [isValid, setIsValid] = useState(false);\r\n\r\n const [error, setError] = useState(false);\r\n const baseForm = { campusId: null };\r\n const [newBooking, setNewBooking] = useState({ ...booking, ...baseForm });\r\n const [step, setStep] = useState(1);\r\n const [riskTemplates, setRiskTemplates] = useState(null);\r\n const [showModal, setShowModal] = useState(false);\r\n\r\n const getData = async () => {\r\n const riskData = await DataService.labBookings.riskTemplate();\r\n const timetable = await DataService.periods();\r\n\r\n //get firstPeriod \r\n setRiskTemplates(riskData);\r\n };\r\n\r\n const copy = () => {\r\n var d = new moment(booking.bookingDate).format('yyyy-MM-DD');\r\n ApiService.post(`bookings/lab/${d}/${booking.id}/copy`)\r\n .then(() => {\r\n setShowModal(false);\r\n onCloseButtonPress(true);\r\n });\r\n }\r\n\r\n const updateValues = (args) => {\r\n setNewBooking((prevState) => {\r\n const newState = { ...prevState, ...args };\r\n return newState;\r\n });\r\n };\r\n\r\n const updateRiskValue = (item, args) => {\r\n setNewBooking((prevState) => {\r\n const newState = { ...prevState };\r\n if (!newBooking.risks) {\r\n newState.risks = [args];\r\n return newState;\r\n }\r\n\r\n const index = newState.risks.findIndex((x) => x.id === item.id);\r\n\r\n if (index > -1) {\r\n newState.risks.splice(index, 1);\r\n }\r\n newState.risks.push(args);\r\n return newState;\r\n });\r\n };\r\n\r\n const next = () => {\r\n setStep((prevState) => {\r\n return prevState + 1;\r\n });\r\n };\r\n const prev = () => {\r\n setStep((prevState) => {\r\n if (prevState === 1) return prevState;\r\n return prevState - 1;\r\n });\r\n };\r\n\r\n const deleteBooking = () => {\r\n var d = new moment(booking.bookingDate).format('yyyy-MM-DD');\r\n ApiService.delete(`booking/lab/${d}/${booking.id}`)\r\n .then(() => {\r\n setShowModal(false);\r\n onCloseButtonPress(true);\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n getData();\r\n }, []);\r\n\r\n const renderRiskSteps = () => {\r\n let className = `step`;\r\n\r\n if (step < 3) {\r\n className += ` next`;\r\n } else if (step > 3) {\r\n className += ` prev`;\r\n } else {\r\n className += ` current`;\r\n }\r\n\r\n return
\r\n \r\n
\r\n \r\n

Risk Matrix

\r\n \r\n
\r\n \r\n \r\n {(riskTemplates ? riskTemplates : []).map((item, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n updateValues({ notes: e.target.value })} />\r\n \r\n \r\n
\r\n
;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n \r\n\r\n\r\n {renderRiskSteps()}\r\n\r\n onCloseButtonPress(true)}\r\n />\r\n
\r\n \r\n \r\n {(step < 4 || error) && \r\n \r\n {step > 1 && (\r\n \r\n Back\r\n \r\n )}\r\n \r\n \r\n {(step < 4) && \r\n {step === 3 ? `Submit` : `Next`} \r\n }\r\n {booking.id && <> setShowModal(true)}\r\n >\r\n   Delete\r\n \r\n \r\n   Copy\r\n }\r\n \r\n }\r\n setShowModal(false)} />\r\n \r\n );\r\n};\r\n","import Loader from \"components/Common/Loader\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport {\r\n Row,\r\n Col,\r\n Card,\r\n CardHeader,\r\n Container,\r\n CardBody,\r\n ModalHeader,\r\n ModalBody,\r\n} from \"reactstrap\";\r\nimport \"./Modal.scss\";\r\nimport LabBookingForm from \"./forms/LabBookings/Form\";\r\n\r\nexport default (props) => {\r\n const [booking, setBooking] = useState(props.booking);\r\n const history = useHistory();\r\n\r\n const component = () => {\r\n switch (booking.type) {\r\n case `lab`:\r\n return ;\r\n break;\r\n }\r\n };\r\n return (\r\n <>\r\n \r\n {booking && <>{component()}} \r\n \r\n \r\n );\r\n};\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport Index from \"views/Index.js\";\r\nimport Login from \"views/auth/Login.js\";\r\nimport LabBookings from \"views/bookings/LabBookings\";\r\nimport LabBooking from \"views/bookings/Booking\";\r\nimport Admin from \"views/admin/index\";\r\nimport AdminSavedBookings from \"views/admin/SavedBookings\";\r\nimport AdminTerms from \"views/admin/terms\";\r\n\r\nvar routes = [\r\n {\r\n path: \"/dashboard\",\r\n name: \"Dashboard\",\r\n icon: \"ni ni-tv-2 text-primary\",\r\n component: Index,\r\n layout: \"/layout\"\r\n },\r\n {\r\n path: \"/lab/bookings/:date?\",\r\n name: \"Lab Bookings\",\r\n icon: \"ni ni-tv-2 text-primary\",\r\n component: LabBookings,\r\n layout: \"/layout\"\r\n }, {\r\n path: \"/lab/booking/:date/:id\",\r\n name: \"Lab Booking\",\r\n icon: \"ni ni-tv-2 text-primary\",\r\n component: LabBooking,\r\n layout: \"/layout\"\r\n },{\r\n path: \"/admin/settings\",\r\n name: \"Admin\",\r\n icon: \"ni ni-tv-2 text-primary\",\r\n component: Admin,\r\n layout: \"/layout\"\r\n },{\r\n path: \"/admin/saved-bookings\",\r\n name: \"AdminSavedBookings\",\r\n icon: \"ni ni-tv-2 text-primary\",\r\n component: AdminSavedBookings,\r\n layout: \"/layout\"\r\n },{\r\n path: \"/admin/terms\",\r\n name: \"Admin\",\r\n icon: \"ni ni-tv-2 text-primary\",\r\n component: AdminTerms,\r\n layout: \"/layout\"\r\n },\r\n // {\r\n // path: \"/icons\",\r\n // name: \"Icons\",\r\n // icon: \"ni ni-planet text-blue\",\r\n // component: Icons,\r\n // layout: \"/layout\"\r\n // },\r\n // {\r\n // path: \"/maps\",\r\n // name: \"Maps\",\r\n // icon: \"ni ni-pin-3 text-orange\",\r\n // component: Maps,\r\n // layout: \"/layout\"\r\n // },\r\n // {\r\n // path: \"/user-profile\",\r\n // name: \"User Profile\",\r\n // icon: \"ni ni-single-02 text-yellow\",\r\n // component: Profile,\r\n // layout: \"/layout\"\r\n // },\r\n // {\r\n // path: \"/tables\",\r\n // name: \"Tables\",\r\n // icon: \"ni ni-bullet-list-67 text-red\",\r\n // component: Tables,\r\n // layout: \"/layout\"\r\n // },\r\n {\r\n path: \"/login\",\r\n name: \"Login\",\r\n icon: \"ni ni-key-25 text-info\",\r\n component: Login,\r\n layout: \"/auth\"\r\n },\r\n // {\r\n // path: \"/oath_callback\",\r\n // name: \"oath_callback\",\r\n // icon: \"ni ni-key-25 text-info\",\r\n // component: OauthCallback,\r\n // layout: \"/auth\"\r\n // },\r\n // {\r\n // path: \"/register\",\r\n // name: \"Register\",\r\n // icon: \"ni ni-circle-08 text-pink\",\r\n // component: Register,\r\n // layout: \"/auth\"\r\n // }\r\n];\r\nexport default routes;\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport React, { useEffect, useState } from \"react\";\r\n// node.js library that concatenates classes (strings)\r\nimport classnames from \"classnames\";\r\n\r\n// reactstrap components\r\nimport {\r\n Button,\r\n Card,\r\n CardHeader,\r\n CardBody,\r\n NavItem,\r\n NavLink,\r\n Nav,\r\n Progress,\r\n Table,\r\n Container,\r\n Row,\r\n Col,\r\n UncontrolledPopover,\r\n PopoverHeader,\r\n PopoverBody,\r\n} from \"reactstrap\";\r\nimport Timetable from \"../components/Timetable/Timetable\";\r\nimport TimetableList from \"../components/Timetable/TimetableList\";\r\nimport Datetime from \"react-datetime\";\r\nimport moment from \"moment\";\r\nimport \"react-datetime/css/react-datetime.css\";\r\n\r\n\r\nexport default () => {\r\n\r\n const [view, setView] = useState(\"timetable\");\r\n const [openDatePicker, setOpenDatePicker] = useState(false);\r\n const [dates, setDates] = useState(null);\r\n\r\n useEffect(() => {\r\n setDates({\r\n startDate: new moment().startOf(\"week\"),\r\n endDate: new moment().endOf(\"week\"),\r\n });\r\n }, []);\r\n\r\n const handleDateChange = (d) => {\r\n const start = new moment(d).startOf(\"week\");\r\n const end = new moment(d).endOf(\"week\");\r\n const newDates = {\r\n startDate: start,\r\n endDate: end,\r\n };\r\n setDates(newDates);\r\n setOpenDatePicker(false);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {/* Page content */}\r\n {dates && (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
Bookings
\r\n <>\r\n \r\n setOpenDatePicker(true)}\r\n >\r\n {dates.startDate.format(\"LL\")} -{\" \"}\r\n {dates.endDate.format(\"LL\")}\r\n \r\n \r\n \r\n \r\n \r\n setOpenDatePicker((prevstate) => !prevstate)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {view === \"timetable\" && (\r\n \r\n )}\r\n {view === \"list\" && (\r\n \r\n )}\r\n \r\n
\r\n \r\n
\r\n
)}\r\n \r\n );\r\n};\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport React, { useEffect, useState } from \"react\";\r\n// node.js library that concatenates classes (strings)\r\nimport classnames from \"classnames\";\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\nimport { BrowserRouter as Router, Switch, Route, useParams } from \"react-router-dom\";\r\n\r\n// reactstrap components\r\nimport {\r\n Card,\r\n CardHeader,\r\n CardBody,\r\n NavItem,\r\n NavLink,\r\n Nav,\r\n Container,\r\n Row,\r\n Col,\r\n Modal\r\n} from \"reactstrap\";\r\nimport Timetable from \"../../components/Timetable/Timetable\";\r\nimport TimetableList from \"../../components/Timetable/TimetableList\";\r\nimport moment from \"moment\";\r\nimport DateSelector from \"./DateSelector\";\r\nimport CreateModal from \"./Modal\";\r\nimport DataService from \"infrastructure/Services/DataService\";\r\n//import \"./index.scss\";\r\n\r\n\r\n\r\n\r\nexport default ({ history }) => {\r\n\r\n const { date } = useParams();\r\n const [view, setView] = useState(\"timetable\");\r\n const [dates, setDates] = useState(null);\r\n const [newBooking, setNewBooking] = useState(null);\r\n const [bookings, setBookings] = useState([]);\r\n\r\n const [zoomLevel, setZoomLevel] = useState(2);\r\n let refreshBookings = null;\r\n\r\n useEffect(() => {\r\n onChangeDate();\r\n refreshBookings = setInterval(() => {onChangeDate()}, 300 * 1000);\r\n\r\n return () => {\r\n clearInterval(refreshBookings);\r\n }\r\n }, []);\r\n\r\n\r\n useEffect(() => {\r\n onChangeDate();\r\n }, [date]);\r\n\r\n\r\n const onChangeDate = () => {\r\n var startOfWeek = date ? new moment(date).startOf(\"week\") : new moment().startOf(\"week\");\r\n\r\n setDates({\r\n startDate: startOfWeek,\r\n endDate: new moment().endOf(\"week\"),\r\n });\r\n\r\n getData(startOfWeek);\r\n }\r\n\r\n useEffect(() => {\r\n\r\n }, [bookings])\r\n\r\n const getData = async (date) => {\r\n \r\n var listUrl = `bookings/lab`;\r\n const tempPeriods = await DataService.periods();\r\n\r\n const selectedDate = date || dates.startDate;\r\n var strSelectedDate = new moment(new Date(selectedDate)).startOf(\"week\").format('yyyy-MM-DD');\r\n\r\n ApiService.get(listUrl, { date: strSelectedDate })\r\n .then(resp => {\r\n for (var i = 0; i <= resp.items.length - 1; i++) {\r\n //get startPeriod\r\n var startPeriod = tempPeriods.find(m => m.id === resp.items[i].startPeriodId);\r\n var endPeriod = tempPeriods.find(m => m.id === resp.items[i].endPeriodId);\r\n\r\n resp.items[i].startPeriod = startPeriod.order;\r\n\r\n var startTime = startPeriod.startTime.split(':');\r\n resp.items[i].startHour = startTime[0];\r\n resp.items[i].startMinute = startTime[1];\r\n resp.items[i].startPeriodName = startPeriod.name;\r\n\r\n\r\n var endtime = endPeriod.startTime.split(':');\r\n resp.items[i].endHour = endtime[0];\r\n resp.items[i].endMinute = endtime[1];\r\n resp.items[i].endPeriod = endPeriod.order;\r\n resp.items[i].endPeriodName = endPeriod.name;\r\n }\r\n setBookings(resp.items);\r\n }\r\n );\r\n\r\n }\r\n\r\n const handleDatesChanged = (start, end) => {\r\n var date = new moment(start).format('yyyy-MM-DD');\r\n history.push(`/lab/bookings/${date}`)\r\n setDates({\r\n startDate: start,\r\n endDate: end,\r\n });\r\n getData(start);\r\n };\r\n\r\n const handleNewBooking = (booking) => {\r\n setNewBooking(booking);\r\n }\r\n\r\n const handleCloseButtonPress = (refresh) => {\r\n setNewBooking(null);\r\n if (refresh === true) getData();\r\n\r\n }\r\n\r\n const updateZoom = (n) => {\r\n setZoomLevel(z => {\r\n let newState = z + (n/2);\r\n while (newState > -1 && newState <= 1)\r\n newState += (n/2);\r\n return newState;\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n {/* Page content */}\r\n {dates && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {view === \"timetable\" && (\r\n \r\n )}\r\n {view === \"list\" && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n\r\n )}\r\n this.toggleModal(\"formModal\")}\r\n >{newBooking && }\r\n \r\n );\r\n};\r\n","import React, { useEffect, useState, useContext } from 'react';\r\nimport { BrowserRouter as Router, Switch, Route, useParams } from \"react-router-dom\";\r\nimport FormColumn from \"components/Common/FormColumn\";\r\nimport moment from 'moment';\r\nimport DataService from \"infrastructure/Services/DataService\";\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\nimport { Card, CardHeader, CardBody, NavItem, NavLink, Nav, Container, Row, Col, Button, Input } from \"reactstrap\";\r\nimport Loader from 'components/Common/Loader';\r\nimport UserContext from \"context/UserContext\";\r\nimport { toast } from 'react-toastify';\r\nimport { CirclePicker } from 'react-color';\r\nimport RiskMatrix from 'components/Common/RiskMatrix';\r\nexport default ((props) => {\r\n const [booking, setBooking] = useState();\r\n const [technicianNotes, setTechnicianNotes] = useState();\r\n const { id } = useParams();\r\n const { date } = useParams();\r\n const user = useContext(UserContext);\r\n useEffect(() => {\r\n getData();\r\n }, []);\r\n\r\n const getData = async () => {\r\n const tempPeriods = await DataService.periods();\r\n const campuses = await DataService.labBookings.campuses();\r\n\r\n ApiService.get(`booking/lab/${date}/${id}`)\r\n .then(resp => {\r\n //get periods\r\n var startPeriod = tempPeriods.find(m => m.id === resp.startPeriod);\r\n var endPeriod = tempPeriods.find(m => m.id === resp.endPeriod);\r\n var campus = campuses.find(m => m.id === resp.campusId);\r\n resp.startPeriod = startPeriod.order;\r\n resp.campus = campus.name;\r\n var startTime = startPeriod.startTime.split(':');\r\n resp.startHour = startTime[0];\r\n resp.startMinute = startTime[1];\r\n resp.startPeriodName = startPeriod.name;\r\n\r\n var endtime = endPeriod.startTime.split(':');\r\n resp.endHour = endtime[0];\r\n resp.endMinute = endtime[1];\r\n resp.endPeriod = endPeriod.order;\r\n resp.endPeriodName = endPeriod.name;\r\n setTechnicianNotes(resp.technicianNotes);\r\n setBooking(resp);\r\n })\r\n }\r\n\r\n\r\n const saveTechnicianNotes = () => {\r\n ApiService.put(`booking/lab/${date}/${id}`, { note: technicianNotes })\r\n .then(resp => {\r\n if (resp && resp.success) {\r\n toast.success(\"Booking Saved\");\r\n }\r\n })\r\n }\r\n\r\n const saveColour = (colour) => {\r\n ApiService.put(`booking/lab/${date}/${id}/colour`, { colour: colour.hex })\r\n .then(resp => {\r\n if (resp && resp.success) {\r\n toast.success(\"Booking Colour Updated\");\r\n }\r\n })\r\n }\r\n\r\n const getAttachment = (attachmentId) => {\r\n ApiService.get(`booking/lab/${date}/${id}/attachment/${attachmentId}`)\r\n .then(resp => {\r\n if (resp && resp.url) {\r\n window.open(resp.url,'_newtab');\r\n }\r\n });\r\n }\r\n\r\n return \r\n \r\n \r\n \r\n \r\n {!booking && }\r\n {booking && <>\r\n \r\n \r\n
Date
\r\n

{new moment(booking.bookingDate).format(\"dddd, LL\")}

\r\n \r\n \r\n
Time
\r\n

\r\n {booking.startPeriodName}\r\n {booking.endPeriodName &&\r\n booking.endPeriodName != booking.startPeriodName && (\r\n <> - {booking.endPeriodName}\r\n )}\r\n

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

{booking.userName}

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

{new moment(booking.createdOn).format(\"dddd, LL hh:mm:ss A\")}

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

{booking.campus}

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

{booking.room}

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

{booking.yearLevel}

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

{booking.class}

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

{booking.practicalName}

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

{booking.setsRequired}

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

{booking.bookReference}

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

{booking.technicianAssistanceRequired == true ? 'Yes' : 'No'}

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

{booking.bookingNotes}

\r\n
\r\n
\r\n {user.isAdmin && <>\r\n \r\n setTechnicianNotes(e.target.value)} value={technicianNotes} />\r\n Save\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n }\r\n {booking.attachments && booking.attachments.length > 0 &&<>\r\n
\r\n \r\n \r\n

Attachments

\r\n {booking.attachments.map(attachment => {\r\n return <>\r\n

{e.preventDefault(); getAttachment(attachment.id);}}>{attachment.name}

\r\n \r\n })}\r\n \r\n
\r\n }\r\n {booking.risks.map(risk => {\r\n return <>\r\n
\r\n \r\n \r\n

{risk.name} Risks

\r\n \r\n
\r\n {risk.hazards.map((hazard) => (\r\n <>\r\n \r\n \r\n {hazard.name}\r\n \r\n \r\n {hazard.value}\r\n \r\n \r\n ))}\r\n <>\r\n \r\n \r\n

Control Measures

\r\n \r\n
\r\n \r\n {risk.controlMeasures.map((method) => (\r\n \r\n {method.name}\r\n \r\n \r\n {method.value ? 'Yes' : 'No'}\r\n \r\n ))}\r\n \r\n \r\n

Notes

\r\n \r\n \r\n {risk.notes}\r\n \r\n
\r\n \r\n })}\r\n \r\n \r\n

{booking.notes}

\r\n
\r\n
\r\n
\r\n }\r\n
\r\n
\r\n \r\n
\r\n
;\r\n\r\n});","import UserContext from \"context/UserContext\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\nimport ApiService from \"../../infrastructure/Services/ApiService\";\r\nimport StorageService from \"../../infrastructure/StorageService\";\r\nimport { Prompt } from \"react-router\";\r\n// reactstrap components\r\nimport {\r\n Card,\r\n CardHeader,\r\n CardBody,\r\n NavItem,\r\n Input,\r\n Nav,\r\n Container,\r\n Row,\r\n Col,\r\n Modal,\r\n} from \"reactstrap\";\r\nimport { toast } from \"react-toastify\";\r\n\r\nexport default () => {\r\n const [data, setData] = useState(null);\r\n const [newClass, setNewClass] = useState({ name: \"\", yearLevel: \"\" });\r\n const [newRoom, setNewRoom] = useState(\"\");\r\n const [newYear, setNewYear] = useState(\"\");\r\n const [leadTime, setLeadTime] = useState(3);\r\n const [isDirty, setDirty] = useState(false);\r\n const user = useContext(UserContext);\r\n const history = useHistory();\r\n const getData = async () => {\r\n await ApiService.fromStorage(`lab-bookings/campuses.json`).then((json) => {\r\n setData(json);\r\n });\r\n\r\n await ApiService.fromStorage(`lab-bookings/leadtime.json`).then((json) => {\r\n setLeadTime(json.leadTime);\r\n });\r\n };\r\n useEffect(() => {\r\n if (!user.isAdmin) {\r\n history.location = \"/dashboard\";\r\n return;\r\n }\r\n getData();\r\n }, []);\r\n\r\n const save = async () => {\r\n ApiService.put(\"settings\", { data: data, leadTime: leadTime }).then(\r\n async (json) => {\r\n toast.success(\"Details Saved\");\r\n\r\n setDirty(false);\r\n await ApiService.fromStorage(`lab-bookings/campuses.json`).then(\r\n (json) => {\r\n StorageService.set(StorageService.keys.labBookingCampuses, json);\r\n }\r\n );\r\n\r\n var rand = Math.random() * 1000;\r\n await ApiService.fromStorage(`lab-bookings/leadtime.json`).then(\r\n (json) => {\r\n StorageService.set(StorageService.keys.leadTime, json.leadTime);\r\n }\r\n );\r\n }\r\n );\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Administration

\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
Lead In Time
\r\n
\r\n
\r\n {\r\n const v = parseInt(e.target.value);\r\n setLeadTime(v);\r\n setDirty(true);\r\n }}\r\n />\r\n
\r\n \r\n {\" \"}\r\n days\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n {data && (\r\n <>\r\n {data.map((campus, ci) => (\r\n <>\r\n \r\n {\r\n \r\n

{campus.name}

\r\n \r\n }\r\n
\r\n\r\n \r\n \r\n
Year Levels
\r\n {campus.yearLevels.map((year, i) => (\r\n \r\n {year}\r\n {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].yearLevels.splice(i, 1);\r\n return newState;\r\n });\r\n setDirty(true);\r\n }}\r\n >
\r\n \r\n ))}\r\n\r\n
\r\n {\r\n const v = e.target.value;\r\n setNewYear(v);\r\n }}\r\n />\r\n\r\n 0)}\r\n onClick={() => {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].yearLevels.push(newYear);\r\n return newState;\r\n });\r\n setNewYear(\"\");\r\n }}\r\n >\r\n Add Year Level\r\n \r\n
\r\n \r\n\r\n \r\n
Classes
\r\n {campus.classes.map((cls, i) => (\r\n \r\n \r\n {cls.name} - {cls.yearLevel}\r\n \r\n {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].classes.splice(i, 1);\r\n return newState;\r\n });\r\n setDirty(true);\r\n }}\r\n >
\r\n \r\n ))}\r\n\r\n
\r\n {\r\n const v = e.target.value;\r\n setNewClass((prevState) => {\r\n const newState = { ...prevState };\r\n newState.name = v;\r\n return newState;\r\n });\r\n }}\r\n />\r\n {\r\n const v = e.target.value;\r\n setNewClass((prevState) => {\r\n const newState = { ...prevState };\r\n newState.yearLevel = v;\r\n return newState;\r\n });\r\n }}\r\n >\r\n \r\n {campus.yearLevels.map((yl) => (\r\n \r\n ))}\r\n \r\n 0 &&\r\n newClass.yearLevel &&\r\n newClass.yearLevel.length > 0\r\n )\r\n }\r\n onClick={() => {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].classes.push(newClass);\r\n return newState;\r\n });\r\n setNewClass({ name: \"\", yearLevel: \"\" });\r\n setDirty(true);\r\n }}\r\n >\r\n Add Class\r\n \r\n
\r\n \r\n \r\n
Rooms
\r\n {campus.rooms.map((room, i) => (\r\n \r\n {room}\r\n {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].rooms.splice(i, 1);\r\n return newState;\r\n });\r\n setDirty(true);\r\n }}\r\n >
\r\n \r\n ))}\r\n\r\n
\r\n {\r\n const v = e.target.value;\r\n setNewRoom(v);\r\n }}\r\n />\r\n\r\n 0)}\r\n onClick={() => {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].rooms.push(newRoom);\r\n return newState;\r\n });\r\n setDirty(true);\r\n setNewRoom(\"\");\r\n }}\r\n >\r\n Add Room\r\n \r\n
\r\n \r\n \r\n \r\n ))}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n","\r\nimport UserContext from \"context/UserContext\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\nimport ApiService from \"../../infrastructure/Services/ApiService\";\r\nimport StorageService from '../../infrastructure/StorageService';\r\n// reactstrap components\r\nimport {\r\n Card,\r\n CardHeader,\r\n CardBody,\r\n NavItem,\r\n Input,\r\n Nav,\r\n Container,\r\n Row,\r\n Col,\r\n Table\r\n} from \"reactstrap\";\r\nimport { toast } from 'react-toastify';\r\n\r\nexport default (() => {\r\n const [data, setData] = useState(null);\r\n\r\n const user = useContext(UserContext);\r\n const history = useHistory();\r\n const getData = async () => {\r\n ApiService.get(`savedbookings/lab/`)\r\n .then(resp => {\r\n let items = resp.items;\r\n resp.items.sort((a,b) => {\r\n var an = a.yearLevel.replace( /^\\D+/g, '');\r\n var bn = b.yearLevel.replace( /^\\D+/g, '');\r\n return an - bn;\r\n });\r\n setData(items);\r\n })\r\n }\r\n useEffect(() => {\r\n if (!user.isAdmin) {\r\n history.location = \"/dashboard\";\r\n return;\r\n }\r\n getData();\r\n }, []);\r\n\r\n const deleteLesson = (id) => {\r\n const confirmDelete = window.confirm(\"Are you sure you would like to delete this booking?\");\r\n if (!confirmDelete) return;\r\n \r\n \r\n ApiService.delete(`savedbooking/lab/${id}`).then(resp => {\r\n toast.success(\"Saved Booking Deleted\");\r\n if (resp && resp.items){\r\n \r\n setData(resp.items);\r\n }\r\n })\r\n }\r\n\r\n return <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Administration > Saved Bookings

\r\n\r\n \r\n
\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {data && data.map(savedBooking =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n\r\n \r\n
Year LevelPracticalNameUserYear\r\n
{savedBooking.yearLevel}{savedBooking.name}{savedBooking.userName}{savedBooking.year}\r\n deleteLesson(savedBooking.id)}\r\n >\r\n
\r\n\r\n {/* {data && <>\r\n {data.map((campus, ci) => <>{\r\n \r\n

{campus.name}

\r\n \r\n\r\n }
\r\n\r\n \r\n \r\n
Year Levels
\r\n {campus.yearLevels.map((year, i) =>\r\n
\r\n {year}\r\n {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].yearLevels.splice(i, 1);\r\n return newState;\r\n\r\n })\r\n }}\r\n >\r\n
\r\n )}\r\n\r\n\r\n
\r\n\r\n {\r\n const v = e.target.value;\r\n setNewYear(v)\r\n }} />\r\n\r\n \r\n
\r\n \r\n\r\n\r\n \r\n
Classes
\r\n {campus.classes.map((cls, i) =>\r\n
\r\n {cls.name} - {cls.yearLevel}\r\n {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].classes.splice(i, 1);\r\n return newState;\r\n\r\n })\r\n }}\r\n >\r\n
\r\n )}\r\n\r\n\r\n
\r\n\r\n {\r\n const v = e.target.value;\r\n setNewClass(prevState => {\r\n const newState = { ...prevState };\r\n newState.name = v\r\n return newState;\r\n })\r\n }} />\r\n \r\n \r\n
\r\n\r\n \r\n \r\n
Rooms
\r\n {campus.rooms.map((room, i) =>\r\n
\r\n {room}\r\n {\r\n setData((prevState) => {\r\n const newState = [...prevState];\r\n newState[ci].rooms.splice(i, 1);\r\n return newState;\r\n })\r\n }}\r\n >\r\n
\r\n )}\r\n\r\n\r\n
\r\n\r\n {\r\n const v = e.target.value;\r\n setNewRoom(v)\r\n }} />\r\n\r\n \r\n
\r\n \r\n \r\n \r\n )}\r\n } */}\r\n\r\n \r\n\r\n \r\n\r\n ;\r\n})","\r\nimport UserContext from \"context/UserContext\";\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { useHistory } from \"react-router\";\r\nimport ApiService from \"../../infrastructure/Services/ApiService\";\r\nimport StorageService from '../../infrastructure/StorageService';\r\nimport DataService from '../../infrastructure/Services/DataService';\r\nimport { CKEditor } from '@ckeditor/ckeditor5-react';\r\nimport ClassicEditor from '@ckeditor/ckeditor5-build-classic';\r\n// reactstrap components\r\nimport {\r\n Card,\r\n CardHeader,\r\n CardBody,\r\n NavItem,\r\n Input,\r\n Nav,\r\n Container,\r\n Row,\r\n Col,\r\n Table\r\n} from \"reactstrap\";\r\nimport { toast } from 'react-toastify';\r\n\r\nexport default (() => {\r\n const [data, setData] = useState();\r\n\r\n const user = useContext(UserContext);\r\n const history = useHistory();\r\n const getData = async () => {\r\n const tempTerms = await DataService.terms();\r\n console.log(tempTerms);\r\n setData(tempTerms);\r\n }\r\n useEffect(() => {\r\n if (!user.isAdmin) {\r\n history.location = \"/dashboard\";\r\n return;\r\n }\r\n getData();\r\n }, []);\r\n\r\n const save = async () => {\r\n ApiService.put('terms', { terms: data }).then(async json => {\r\n toast.success(\"Terms Saved\");\r\n\r\n await ApiService.fromStorage(`lab-bookings/terms.json`).then((json) => { \r\n StorageService.set(StorageService.keys.terms, json.terms);\r\n })\r\n\r\n });\r\n }\r\n\r\n\r\n\r\n return <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

Administration > Booking Terms

\r\n \r\n \r\n
\r\n
\r\n \r\n {data && {\r\n // You can store the \"editor\" and use when it is needed.\r\n console.log( 'Editor is ready to use!', editor );\r\n } }\r\n onChange={ ( event, editor ) => {\r\n const newData = editor.getData();\r\n setData(newData);\r\n } }\r\n onBlur={ ( event, editor ) => {\r\n console.log( 'Blur.', editor );\r\n } }\r\n onFocus={ ( event, editor ) => {\r\n console.log( 'Focus.', editor );\r\n } }\r\n />}\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n ;\r\n})","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport Callback from \"components/Authentication/OAuth/Callback\";\r\nimport Loader from \"components/Common/Loader\";\r\nimport UserContext from \"context/UserContext\";\r\nimport ApiService from \"infrastructure/Services/ApiService\";\r\nimport React, { useEffect, useContext, useState, useCallback } from \"react\";\r\nimport { useHistory } from \"react-router-dom\";\r\n// reactstrap components\r\nimport {\r\n Button,\r\n Card,\r\n CardHeader,\r\n CardBody,\r\n FormGroup,\r\n Form,\r\n Input,\r\n InputGroupAddon,\r\n InputGroupText,\r\n InputGroup,\r\n Row,\r\n Col,\r\n Alert\r\n} from \"reactstrap\";\r\n\r\nexport default (({ location }) => {\r\n const userContext = useContext(UserContext);\r\n const [username, setUsername] = useState('');\r\n const [password, setPassword] = useState('');\r\n const [loading, setLoading] = useState(false);\r\n\r\n const [errors, setErrors] = useState([]);\r\n const [authType, setAuthType] = useState(null);\r\n const [isOAuthCallback, setIsOAuthCallback] = useState(null);\r\n const history = useHistory();\r\n\r\n useEffect(() => {\r\n //set oauth callback:\r\n const code = location.search.match(/code=([^&]+)/)\r\n const state = location.search.match(/state=([^&]+)/)\r\n setIsOAuthCallback(code != null && state != null);\r\n\r\n const domain = location.search.match(/domain=([^&]+)/)\r\n if (domain && domain.length > 1){\r\n const loginEmailAddress = \"login@\" + domain[1];\r\n login(loginEmailAddress);\r\n\r\n }\r\n }, [])\r\n\r\n const handleOAuthCancel = (message) => { setIsOAuthCallback(false); setErrors([message]) }\r\n const login = (userParam) => {\r\n var usr = userParam || username;\r\n setLoading(true);\r\n ApiService.post('login', { emailAddress: usr, password })\r\n .then(resp => {\r\n if (!resp) {\r\n setLoading(false);\r\n\r\n return;\r\n }\r\n setAuthType(resp.authType);\r\n\r\n if (resp.authType === 'AzureAD' && resp.redirectUrl) {\r\n setTimeout(() => { window.location = resp.redirectUrl }, 200);\r\n } else {\r\n setLoading(false);\r\n }\r\n });\r\n }\r\n return (\r\n <>\r\n \r\n \r\n {isOAuthCallback != null && isOAuthCallback === true && }\r\n {isOAuthCallback != null && isOAuthCallback === false &&\r\n \r\n {errors.length > 0 && \r\n
    \r\n {errors.map(error =>
  • {error}
  • )}\r\n
\r\n
}\r\n
\r\n Sign in to your account\r\n
\r\n {
\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n\r\n if (e.key === 'Enter') {\r\n e.preventDefault();\r\n login();\r\n }\r\n }}\r\n onChange={(e) => {\r\n\r\n setUsername(e.target.value);\r\n }} />\r\n \r\n \r\n {authType === `password` && <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n setPassword(e.target.value)} />\r\n \r\n \r\n\r\n
\r\n \r\n \r\n Remember me\r\n \r\n
\r\n \r\n \r\n e.preventDefault()}\r\n >\r\n Forgot password?\r\n \r\n \r\n\r\n \r\n }\r\n
\r\n \r\n
\r\n }\r\n\r\n
}\r\n
\r\n\r\n \r\n \r\n )\r\n});\r\n","import React from 'react';\r\n\r\n\r\nexport default ({ location }) => {\r\n\r\n const section = () => {\r\n let pathName = location.pathname || ``;\r\n pathName = pathName.substr(1);\r\n pathName = pathName.substr(0, pathName.indexOf(`/`));\r\n pathName = pathName.toLowerCase();\r\n let icon = ``;\r\n let title = ``;\r\n let sectionName = ``;\r\n\r\n switch (pathName) {\r\n case `lab`:\r\n icon = `flask`;\r\n title = `Bookings`;\r\n sectionName = `Lab Bookings`;\r\n break;\r\n default:\r\n icon = `flask`;\r\n title = `Bookings`;\r\n sectionName = `Lab Bookings`;\r\n break;\r\n }\r\n\r\n return
\r\n \r\n {sectionName}\r\n

{title}

\r\n\r\n
;\r\n }\r\n\r\n return <>{section()}\r\n};\r\n\r\nconst styles = {\r\n icon: { maxWidth: 40, float: `left`, display: `block`, float: `left` },\r\n h1: { lineHeight: 1 }\r\n};\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport React from \"react\";\r\nimport { Route, Switch, Redirect } from \"react-router-dom\";\r\n// reactstrap components\r\nimport { Container } from \"reactstrap\";\r\n// core components\r\nimport AdminNavbar from \"components/Navbars/AdminNavbar.js\";\r\nimport AdminFooter from \"components/Footers/AdminFooter.js\";\r\nimport Sidebar from \"components/Sidebar/Sidebar.js\";\r\nimport Header from \"components/Headers/Header.js\";\r\nimport { ToastContainer, toast } from 'react-toastify';\r\n import 'react-toastify/dist/ReactToastify.css';\r\nimport routes from \"routes.js\";\r\nimport Title from \"components/Title/Title\";\r\n\r\nclass Layout extends React.Component {\r\n componentDidUpdate(e) {\r\n document.documentElement.scrollTop = 0;\r\n document.scrollingElement.scrollTop = 0;\r\n this.refs.mainContent.scrollTop = 0;\r\n }\r\n getRoutes = routes => {\r\n return routes.map((prop, key) => {\r\n if (prop.layout === \"/layout\") {\r\n return (\r\n \r\n );\r\n } else {\r\n return null;\r\n }\r\n });\r\n };\r\n getBrandText = path => {\r\n for (let i = 0; i < routes.length; i++) {\r\n if (\r\n this.props.location.pathname.indexOf(\r\n routes[i].layout + routes[i].path\r\n ) !== -1\r\n ) {\r\n return routes[i].name;\r\n }\r\n }\r\n return \"Brand\";\r\n };\r\n\r\n getTitle = () => {\r\n return \r\n }\r\n render() {\r\n return (\r\n <><ToastContainer />\r\n <div className=\"main-content\" ref=\"mainContent\">\r\n <AdminNavbar\r\n {...this.props}\r\n brandText={this.getBrandText(this.props.location.pathname)}\r\n />\r\n <Header Title={this.getTitle(this.props.location.pathname)} />\r\n <Switch>\r\n {this.getRoutes(routes)}\r\n <Redirect from=\"*\" to=\"/lab/bookings\" />\r\n </Switch>\r\n <Container fluid>\r\n <AdminFooter />\r\n </Container>\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default Layout;\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport React from \"react\";\r\nimport { Route, Switch, Redirect } from \"react-router-dom\";\r\n// reactstrap components\r\nimport { Container, Row, Col } from \"reactstrap\";\r\nimport routes from \"routes.js\";\r\n\r\nclass Auth extends React.Component {\r\n componentDidMount() {\r\n //document.body.classList.add(\"bg-default\");\r\n }\r\n componentWillUnmount() {\r\n //document.body.classList.remove(\"bg-default\");\r\n }\r\n getRoutes = routes => {\r\n return routes.map((prop, key) => {\r\n if (prop.layout === \"/auth\") {\r\n return (\r\n <Route\r\n path={prop.layout + prop.path}\r\n component={prop.component}\r\n key={key}\r\n />\r\n );\r\n } else {\r\n return null;\r\n }\r\n });\r\n };\r\n render() {\r\n return (\r\n <>\r\n <div className=\"main-content main-content-login\">\r\n {/* <AuthNavbar /> */}\r\n <div className=\"header bg-gradient-login py-7 py-lg-8\">\r\n <div style={styles.wyvernContainer}>\r\n <img src={require('../assets/img/wyvern.svg')} style={styles.wyvern} />\r\n </div>\r\n <div className=\"separator separator-bottom separator-skew zindex-100\">\r\n \r\n </div>\r\n </div>\r\n {/* Page content */}\r\n <Container className=\"mt--8 pb-5\">\r\n <Row className=\"justify-content-center\">\r\n <Switch>\r\n {this.getRoutes(routes)}\r\n <Redirect from=\"*\" to=\"/auth/login\" />\r\n </Switch>\r\n </Row>\r\n </Container>\r\n \r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\n\r\nconst styles ={\r\n wyvernContainer: {\r\n position: 'absolute',\r\n zIndex: -10,\r\n left: -300,\r\n top: 0,\r\n width: '100%'\r\n\r\n },\r\n wyvern: {\r\n opacity: 0.2,\r\n width: 700,\r\n position: 'absolute',\r\n left: '80%',\r\n top:'60%'\r\n }\r\n}\r\nexport default Auth;\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport { BrowserRouter, Route, Switch, Redirect } from \"react-router-dom\";\r\nimport UserContext, { UserContextProvider } from \"./context/UserContext\";\r\nimport PrivateRoute from \"./infrastructure/ProtectedRoute\";\r\nimport { HotKeys } from \"react-hotkeys\";\r\nimport Layout from \"layouts/Layout.js\";\r\nimport AuthLayout from \"layouts/Auth.js\";\r\nimport StorageService from \"infrastructure/StorageService\";\r\nexport const App = () => {\r\n return (\r\n <UserContextProvider>\r\n <AppRoutes />\r\n </UserContextProvider>\r\n );\r\n};\r\n\r\nconst keyMap = {\r\n increaseZoom: \"=\",\r\n decreaseZoom: \"-\"\r\n};\r\n\r\n\r\nconst AppRoutes = () => {\r\n const userContext = useContext(UserContext);\r\n const [userContextHasLoaded, setUserContextHasLoaded] = useState(false);\r\n\r\n useEffect(() => {\r\n const storedCredentials = StorageService.get(StorageService.keys.user);\r\n if (storedCredentials && storedCredentials.token) {\r\n userContext.login(storedCredentials);\r\n }\r\n setUserContextHasLoaded(true);\r\n }, []);\r\n return <HotKeys keyMap={keyMap}>{userContextHasLoaded ? (\r\n <BrowserRouter>\r\n <Switch>\r\n {/* <PrivateRoute\r\n authed={userContext.isAuthenticated}\r\n path=\"/dashboard\"\r\n component={Layout}\r\n /> */}\r\n <PrivateRoute\r\n authed={userContext.isAuthenticated}\r\n path=\"/lab/bookings\"\r\n component={Layout}\r\n />\r\n <PrivateRoute\r\n authed={userContext.isAuthenticated}\r\n path=\"/lab/booking/:date/:id\"\r\n component={Layout}\r\n />\r\n\r\n <PrivateRoute\r\n authed={userContext.isAuthenticated}\r\n path=\"/bookings/create\"\r\n component={Layout}\r\n />\r\n <PrivateRoute\r\n authed={userContext.isAuthenticated}\r\n path=\"/admin/settings\"\r\n component={Layout}\r\n />\r\n <PrivateRoute\r\n authed={userContext.isAuthenticated}\r\n path=\"/admin/saved-bookings\"\r\n component={Layout}\r\n />\r\n <PrivateRoute\r\n authed={userContext.isAuthenticated}\r\n path=\"/admin/terms\"\r\n component={Layout}\r\n />\r\n <Route\r\n path=\"/auth/login\"\r\n render={(props) => <AuthLayout {...props} />}\r\n />\r\n <Redirect from=\"/\" to=\"/lab/bookings\" />\r\n </Switch>\r\n </BrowserRouter>\r\n ) : (\r\n <h1>Loading...</h1>\r\n )}</HotKeys>\r\n};\r\n","/*!\r\n\r\n=========================================================\r\n* Argon Dashboard React - v1.1.0\r\n=========================================================\r\n\r\n* Product Page: https://www.creative-tim.com/product/argon-dashboard-react\r\n* Copyright 2019 Creative Tim (https://www.creative-tim.com)\r\n* Licensed under MIT (https://github.com/creativetimofficial/argon-dashboard-react/blob/master/LICENSE.md)\r\n\r\n* Coded by Creative Tim\r\n\r\n=========================================================\r\n\r\n* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n\r\n*/\r\nimport React, { useContext, useEffect, useState } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport {App} from './App';\r\nimport \"assets/plugins/nucleo/css/nucleo.css\";\r\nimport \"@fortawesome/fontawesome-free/css/all.min.css\";\r\nimport \"assets/scss/site.scss\";\r\n\r\n\r\nReactDOM.render(<><App /></>,\r\n document.getElementById(\"root\")\r\n);"],"sourceRoot":""}