{"version":3,"sources":["api scripts/calendarInterface.js","Assets/images/classes/IMG_2392.jpg","Assets/images/classes/IMG_2510.jpg","Assets/images/classes/IMG_2652.jpg","Assets/images/classes/IMG_3200.jpg","Assets/images/classes/IMG_3311.jpg","Assets/images/classes/IMG_7647.jpg","Assets/images/classes/IMG_7650.jpg","Assets/logos/IACET.png","Assets/logos/osha logo.svg","Assets/logos/ATSSA logo.svg","Assets/logos/NYC_buildings logo.svg","Assets/logos/nccer logo.png","Assets/images/thumbnail_IMG_5658.jpg","Assets/logos/osha logo white.svg","Assets/logos/NYC_buildings logo white.svg","Assets/logos/IACET_logo white.svg","Assets/logos/ATSSA logo white.svg","Assets/logos/NCCER.svg","Assets/thumbnail_logo.jpg","Assets/logos/thumbnail_logo.svg","Components/SectionImg.js","Components/Slider.js","data/aboutData.js","Components/About.js","api scripts/storageInterface.js","data/coursesData.js","Components/Calendar/Admin.js","Components/Calendar/Event.js","Components/Calendar/Holiday.js","Components/Calendar/Day.js","Components/Calendar/Week.js","Components/Calendar/SingleDay.js","Components/Calendar/Month.js","Components/Calendar/Calendar.js","Components/ContactFormModal.js","Components/ContactForm.js","Components/Contact.js","Components/Courses/CourseDetails.js","Components/Courses/CourseInfo.js","Components/Courses/Category.js","Components/Courses/Agency.js","Components/Courses/Courses.js","data/navBarData.js","Components/Footer.js","Components/Header.js","Components/HomeHeader.js","Components/Home.js","data/policiesData.js","Components/Policies.js","App.js","serviceWorker.js","index.js"],"names":["CalendarInterface","year","month","this","createMonth","dayNo","event","monthData","days","events","push","day","holidayName","message","holiday","monthNo","monthName","0","1","2","3","4","5","6","7","8","9","10","11","monthObject","Date","daysInMonth","getDate","newCalendarMonth","i","setDate","dayOfWeek","getDay","date","monthJSON","forEach","eventsCopy","slice","dayCopy","Object","assign","console","log","daysCopy","len","length","j","TypeError","copyDays","error","Boolean","eventNo","splice","JSON","stringify","module","exports","SectionImg","title","pageName","id","className","Slider","props","state","indexNo","visibleElemId","sliderName","intervalId","startSlides","stopSlides","counter","timerId","setInterval","fade","updateSlide","setState","clearInterval","fadeInElem","document","getElementById","classList","remove","add","fadeOutElem","prevState","pics","currentIndex","hiddenElemId","src","alt","Component","require","agencyInfo","name","description","classesAvailable","logo","About","imgClass","map","key","href","storageInterface","devAddress","prodAddress","errMessage","stage","method","body","config","mode","headers","fetchAddress","fetch","then","response","json","statusCode","calendarData","parse","catch","filename","a","callFetch","data","file","line1","line2","courseData","agency","category","categoryName","overview","courseInfo","details","Description","CEU","Length","Languages","Price","Admin","allCalendarData","viewMonth","viewYear","radioClickHandler","evt","unSelectedRadioElemId","target","selectedInputElemId","unSelectedInputElemId","unSelectedRadioElem","selectedInputElem","unSelectedInputElem","checked","disabled","useState","setDaysInMonth","dateSelectHandler","yearSelectElem","monthSelectElem","value","dayCount","parseInt","buildDaysInMonth","useEffect","selectInfo","course","onSubmit","preventDefault","submitHandler","htmlFor","onChange","getFullYear","type","onClick","startTimeElem","startTimeChangeHandler","Event","courseName","startTime","endTime","locationLine1","locationLine2","Holiday","handleHover","overflowCheck","dateId","toggle","Day","dayData","history","match","isAdmin","path","clickable","setOverflowCheck","dayElem","useRef","useLayoutEffect","current","clientHeight","scrollHeight","ref","dayClickHandler","onMouseEnter","onMouseLeave","index","Week","daysInWeek","weekNum","SingleDay","adminFuncs","singleDayData","daysOfWeek","full","goBack","removeClass","updateClass","addClass","abrv","Month","monthInWeeks","params","selectedMonth","selectedDay","undefined","exact","render","values","week","Calendar","addClassHandler","getMonthData","removeClassHandler","importMonthData","removeEvent","setMonthData","exportMonthData","getEventsForDay","updateClassHandler","getMonth","setCurrentDateToState","getCalendarData","setCalendarDataToState","StorageInterface","downloadData","dl","makeCalendarData","stateCalendarData","buffer","bufferCount","bufferedMonth","unshift","fillExtraSpacesOnCalendar","breakMonthIntoWeeks","getMonthInWeeks","ContactModal","show","ContactForm","hideModal","ContactFormModal","action","placeholder","required","Contact","showModal","modalMessage","timeoutId","bind","timeout","setTimeout","Error","email","subject","validator","errors","validate","join","createAndThrowError","formData","vaildate_form","sendEmail","emailError","setModalMessage","toggleModal","clear_form","clearTimeout","rel","CourseDetails","categoryIndex","courseIndex","idString","elem","detailsClickHandler","keys","detail","CourseInfo","courseDetailsPresent","Category","Agency","agencyName","collapseHandler","Courses","linkInfo","link","Footer","to","Header","mobileMenu","handleMenuClick","handleMouseLeave","handleLinkClick","mobileNavElem","menuIconElem","style","color","closeMobileMenu","openMobileMenu","withRouter","imageSrc","Home","testimonialIndex","testimonials","quote","author","company","startTestimonials","fadeIn","fadeOut","nextQuote","testimonialsElem","policies","policyName","Policies","App","component","window","location","hostname","ReactDOM","StrictMode","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.b3ce19f8.chunk.js","sourcesContent":["/*\r\n CalendarInterface methods\r\n\r\n addEvent(day:int, event:obj) -> instance\r\n adds an event to a days events array\r\n\r\n addHoliday(day:int, holidayName:string, message:string) -> instance\r\n adds a holiday and a message to a day\r\n\r\n clearDay(day:int) -> instance\r\n clears all events from a days events array\r\n\r\n createMonth(year:int, month:int) -> instance\r\n initiallizes monthData by creating an object for the\r\n month with an array of objects for each day of the month\r\n\r\n exportMonthData() -> object\r\n returns all data for the month in the form of an object\r\n\r\n getEventsForDay(day:int) -> array\r\n returns the events array for the requested day\r\n\r\n importMonthData(monthData:obj) -> instance\r\n takes in an an object and uses its data to set the \r\n instances monthData\r\n\r\n isHoliday(day:int) -> bool\r\n returns true/false if the day passed is a holiday\r\n\r\n removeEvent(day:int, eventNo:int) -> instance\r\n removes the event at eventNo index from the \r\n passed days events array\r\n\r\n removeHoliday(day:int) -> instance\r\n removes holday name and message from passed day\r\n\r\n toString() -> string\r\n return JSON.stringified version of the monthsData\r\n\r\n updateEvent(day:int, eventNo:int, event:object) -> instance\r\n updates the event at index eventNo in the passed \r\n days events array\r\n\r\n events format\r\n {\r\n \"courseName\": \"\",\r\n \"startTime\": \"\",\r\n \"endTime\": \"\"\r\n }\r\n\r\n*/\r\n\r\nclass CalendarInterface {\r\n constructor(year=null, month=null) {\r\n if(year !== null && month !== null) {\r\n this.createMonth(year, month);\r\n }\r\n }\r\n\r\n\r\n addEvent(dayNo, event) {\r\n this.monthData.days[dayNo].events.push(event);\r\n return this;\r\n }\r\n\r\n\r\n addHoliday(day, holidayName, message=\"\") {\r\n this.monthData.days[day].holiday = holidayName;\r\n this.monthData.days[day].message = message;\r\n return this;\r\n }\r\n\r\n\r\n clearDay(day) {\r\n this.monthData.days[day].events = [];\r\n return this;\r\n }\r\n\r\n\r\n clearMonth() {\r\n this.createMonth(this.year, this.monthNo);\r\n return this;\r\n }\r\n\r\n \r\n createMonth(year, month){\r\n this.monthNo = month;\r\n this.year = year;\r\n \r\n let monthsOfYear = {\r\n 0: 'January',\r\n 1: 'February',\r\n 2: 'March',\r\n 3: 'April',\r\n 4: 'May',\r\n 5: 'June',\r\n 6: 'July',\r\n 7: 'August',\r\n 8: 'September',\r\n 9: 'October',\r\n 10: 'November',\r\n 11: 'December'\r\n }\r\n\r\n this.monthName = monthsOfYear[month];\r\n\r\n let monthObject = new Date(year, month);\r\n let daysInMonth = new Date(year, month+1, 0).getDate();\r\n let newCalendarMonth = {\r\n monthName: this.monthName,\r\n monthNo: this.monthNo,\r\n year: this.year,\r\n days: []\r\n };\r\n\r\n for (let i = 1; i < daysInMonth + 1; i++) {\r\n monthObject.setDate(i)\r\n let day = {\r\n dayOfWeek: monthObject.getDay(),\r\n date: i,\r\n holiday: false,\r\n message: '',\r\n events: []\r\n }\r\n\r\n newCalendarMonth.days.push(day);\r\n }\r\n\r\n this.monthData = newCalendarMonth;\r\n return this;\r\n }\r\n\r\n\r\n exportMonthData() {\r\n // export deep copy of monthData\r\n let monthJSON = {\r\n monthName: this.monthName,\r\n monthNo: this.monthNo,\r\n year: this.year,\r\n days: []\r\n\r\n };\r\n this.monthData.days.forEach(day => {\r\n let eventsCopy = day.events.slice();\r\n let dayCopy = Object.assign({}, day);\r\n dayCopy.events = eventsCopy\r\n monthJSON.days.push(dayCopy);\r\n })\r\n console.log(\"exporting monthJSON\", monthJSON);\r\n return monthJSON;\r\n }\r\n\r\n\r\n getEventsForDay(day) {\r\n return this.monthData.days[day].events;\r\n }\r\n\r\n copyDays(days) {\r\n const daysCopy = [];\r\n\r\n for (let i = 0, len = days.length; i < len; i++) {\r\n daysCopy[i] = {};\r\n Object.assign(daysCopy[i], days[i]);\r\n const events = days[i].events;\r\n const eventsCopy = [];\r\n if (events.length > 0) {\r\n for(let j = 0, len = events.length; j < len; j++) {\r\n eventsCopy[j] = {};\r\n Object.assign(eventsCopy[j], events[j]); \r\n }\r\n }\r\n daysCopy[i].events = eventsCopy;\r\n }\r\n return daysCopy;\r\n }\r\n\r\n\r\n importMonthData(monthData) {\r\n try {\r\n if (typeof monthData !== 'object') {\r\n throw TypeError('monthData needs to be an object');\r\n }\r\n this.createMonth(monthData.year, monthData.monthNo)\r\n this.monthData.days = this.copyDays(monthData.days);\r\n console.log(this.days);\r\n } catch(error) {\r\n console.error('An error occured in CalendarInterface constructor: ', error.message);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n\r\n isHoliday(day) {\r\n return Boolean(this.monthData.days[day].holiday)\r\n }\r\n\r\n\r\n removeEvent(day, eventNo) {\r\n this.monthData.days[day].events.splice(eventNo, 1);\r\n console.log(\"monthData after removing event\", this.monthData.days);\r\n return this;\r\n }\r\n\r\n\r\n removeHoliday(day) {\r\n this.monthData.days[day].holiday = false;\r\n this.monthData.days[day].message = '';\r\n return this\r\n }\r\n\r\n \r\n toString() {\r\n return JSON.stringify(this.monthData);\r\n }\r\n\r\n\r\n updateEvent(day, eventNo, event) {\r\n this.monthData.days[day].events[eventNo] = event;\r\n return this;\r\n }\r\n\r\n}\r\n\r\nconsole.log(module);\r\n// export for running from web app\r\nexport default CalendarInterface;\r\n\r\n// var exports for running from node cli\r\n// var exports = module.exports = {};\r\n// const _CalendarInterface = CalendarInterface;\r\n// exports.CalendarInterface = _CalendarInterface;\r\n// this is not needed\r\n// export { _CalendarInterface as CalendarInterface };\r\n\r\n\r\n// const fs = require('fs');\r\n\r\n\r\n// let calendarInstance = new CalendarInterface(2021, 7);\r\n// const calendarJSON = calendarInstance.exportMonthData();\r\n// console.log(typeof calendarJSON);\r\n\r\n// fs.writeFile('./../data/calendarDataTEST.json', JSON.stringify(calendarJSON), err => {\r\n// if (err) {\r\n// console.log(err);\r\n// return\r\n// }\r\n// console.log(\"file written succesfully\");\r\n// });\r\n\r\n\r\n\r\n\r\n","module.exports = __webpack_public_path__ + \"static/media/IMG_2392.eab4e2ae.jpg\";","module.exports = __webpack_public_path__ + \"static/media/IMG_2510.662f2332.jpg\";","module.exports = __webpack_public_path__ + \"static/media/IMG_2652.7e147018.jpg\";","module.exports = __webpack_public_path__ + \"static/media/IMG_3200.a6569378.jpg\";","module.exports = __webpack_public_path__ + \"static/media/IMG_3311.cb5d630f.jpg\";","module.exports = __webpack_public_path__ + \"static/media/IMG_7647.f7d373ae.jpg\";","module.exports = __webpack_public_path__ + \"static/media/IMG_7650.f04518b3.jpg\";","module.exports = __webpack_public_path__ + \"static/media/IACET.fd51c62a.png\";","module.exports = __webpack_public_path__ + \"static/media/osha logo.ed680b9a.svg\";","module.exports = __webpack_public_path__ + \"static/media/ATSSA logo.c746aae3.svg\";","module.exports = __webpack_public_path__ + \"static/media/NYC_buildings logo.99ddab3b.svg\";","module.exports = __webpack_public_path__ + \"static/media/nccer logo.18e13893.png\";","module.exports = __webpack_public_path__ + \"static/media/thumbnail_IMG_5658.056a4f21.jpg\";","module.exports = __webpack_public_path__ + \"static/media/osha logo white.8a860420.svg\";","module.exports = __webpack_public_path__ + \"static/media/NYC_buildings logo white.c3ba98a1.svg\";","module.exports = __webpack_public_path__ + \"static/media/IACET_logo white.e01f5d42.svg\";","module.exports = __webpack_public_path__ + \"static/media/ATSSA logo white.51e36009.svg\";","module.exports = __webpack_public_path__ + \"static/media/NCCER.3fbef90d.svg\";","module.exports = __webpack_public_path__ + \"static/media/thumbnail_logo.f18590bd.jpg\";","module.exports = __webpack_public_path__ + \"static/media/thumbnail_logo.1e4c20ab.svg\";","import React from 'react';\r\n\r\nconst SectionImg = ({ title, pageName }) => {\r\n return (\r\n
\r\n {title ?

{title}

: null}\r\n
\r\n )\r\n }\r\n\r\nexport default SectionImg;","import React, { Component } from 'react';\r\n// import SectionImg from \"./SectionImg\";\r\n\r\nclass Slider extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n indexNo: 1,\r\n visibleElemId: `${this.props.sliderName}ImgOne`,\r\n intervalId: \"\",\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.startSlides();\r\n }\r\n\r\n componentWillUnmount() {\r\n this.stopSlides();\r\n }\r\n\r\n startSlides() {\r\n let counter = 0;\r\n const timerId = setInterval(() =>{\r\n counter += 1;\r\n if (counter === 28) {\r\n this.fade();\r\n } else if (counter === 29) {\r\n this.updateSlide();\r\n } else if (counter > 29) {\r\n counter = 0;\r\n }\r\n\r\n },500);\r\n this.setState({intervalId: timerId});\r\n }\r\n\r\n stopSlides() {\r\n clearInterval(this.state.intervalId);\r\n }\r\n\r\n fade() {\r\n const { visibleElemId } = this.state;\r\n const { sliderName } = this.props;\r\n\r\n const fadeInElem = visibleElemId === `${sliderName}ImgOne` ? \r\n document.getElementById(`${sliderName}ImgTwo`) : document.getElementById(`${sliderName}ImgOne`);\r\n fadeInElem.classList.remove('sliderPicFadeOut');\r\n fadeInElem.classList.add('sliderPicFadeIn');\r\n \r\n const fadeOutElem = visibleElemId === `${sliderName}ImgOne` ? \r\n document.getElementById(`${sliderName}ImgOne`) : document.getElementById(`${sliderName}ImgTwo`);\r\n fadeOutElem.classList.remove('sliderPicFadeIn');\r\n fadeOutElem.classList.add('sliderPicFadeOut');\r\n\r\n this.setState((prevState) => {\r\n return ({ \r\n visibleElemId: prevState.visibleElemId === `${sliderName}ImgOne` ? `${sliderName}ImgTwo` : `${sliderName}ImgOne`\r\n })\r\n });\r\n }\r\n\r\n updateSlide() {\r\n const { pics, sliderName } = this.props;\r\n\r\n this.setState((prevState) => {\r\n const currentIndex = prevState.indexNo >= pics.length - 1 ? 0 : prevState.indexNo + 1;\r\n const hiddenElemId = this.state.visibleElemId === `${sliderName}ImgOne` ? `${sliderName}ImgTwo` : `${sliderName}ImgOne`;\r\n const updatePicElem = document.getElementById(`${hiddenElemId}`);\r\n updatePicElem.src = pics[currentIndex];\r\n return ({\r\n indexNo: currentIndex\r\n })\r\n });\r\n }\r\n\r\n\r\n\r\n render() {\r\n const { sliderName, pics } = this.props;\r\n return (\r\n
\r\n {`${sliderName}`}/\r\n {`${sliderName}`}/\r\n
\r\n )\r\n }\r\n\r\n}\r\n\r\nexport default Slider;","export const pics = [\r\n require(\"..\\\\Assets\\\\images\\\\classes\\\\IMG_2392.jpg\"),\r\n require(\"..\\\\Assets\\\\images\\\\classes\\\\IMG_2510.jpg\"),\r\n require(\"..\\\\Assets\\\\images\\\\classes\\\\IMG_2652.jpg\"),\r\n require(\"..\\\\Assets\\\\images\\\\classes\\\\IMG_3200.jpg\"),\r\n require(\"..\\\\Assets\\\\images\\\\classes\\\\IMG_3311.jpg\"),\r\n require(\"..\\\\Assets\\\\images\\\\classes\\\\IMG_7647.jpg\"),\r\n require(\"..\\\\Assets\\\\images\\\\classes\\\\IMG_7650.jpg\")\r\n]\r\n\r\nexport const agencyInfo = [\r\n {\r\n name: 'IACET',\r\n description: 'The International Accreditors for Continuing Education and Training (IACET) developed the original Continuing Education Unit (CEU) and today ensures that providers of continuing education and training can prove they provide high-quality instruction by following the ANSI/IACET 2018-1 Standard for Continuing Education and Training through a rigorous accreditation process.',\r\n classesAvailable: false,\r\n logo: require('..\\\\Assets\\\\logos\\\\IACET.png')\r\n },\r\n {\r\n name: 'OSHA',\r\n description: 'With the Occupational Safety and Health Act of 1970, Congress created the Occupational Safety and Health Administration (OSHA) to ensure safe and healthful working conditions for working men and women by setting and enforcing standards and by providing training, outreach, education and assistance.',\r\n classesAvailable: true,\r\n logo: require('..\\\\Assets\\\\logos\\\\osha logo.svg')\r\n },\r\n {\r\n name: 'ATSSA',\r\n description: 'ATSSA was incorporated in 1970 as an International Trade Association. ATSSA is a member partnership comprised of approximately 1,500 companies representing over 11,000 industry professionals in the sign manufacturing, pavement marking, guardrail and barrier, traffic services, and traffic signals technical divisions.',\r\n classesAvailable: true,\r\n logo: require('..\\\\Assets\\\\logos\\\\ATSSA logo.svg')\r\n },\r\n {\r\n name: 'DOB',\r\n description: 'The Department of Buildings promotes the safety of all people that build, work, and live in New York City by regulating the lawful use of over one million buildings and construction sites across the five boroughs. With a focus on safety, service, and integrity, the Department enforces the City’s Construction Codes, Zoning Resolution, and the New York State Multiple Dwelling Law.',\r\n classesAvailable: true,\r\n logo: require('..\\\\Assets\\\\logos\\\\NYC_buildings logo.svg')\r\n },\r\n {\r\n name: 'NCCER',\r\n description: 'NCCER is a not-for-profit 501(c)(3) education foundation created in 1996 as The National Center for Construction Education and Research. It was developed with the support of more than 125 construction CEOs and various association and academic leaders who united to revolutionize training for the construction industry.',\r\n classesAvailable: false,\r\n logo: require('..\\\\Assets\\\\logos\\\\nccer logo.png')\r\n },\r\n]\r\n","import React from 'react';\r\n\r\nimport SectionImg from './SectionImg';\r\nimport Slider from './Slider';\r\n\r\nimport {pics, agencyInfo} from '../data/aboutData';\r\n\r\n\r\nconst About = () => (\r\n
\r\n \r\n
\r\n
\r\n
\r\n

Our Mission

\r\n

\r\n In everything we do in life safety comes first, our company was developed for this reason. People always want security; here at Essential Safety Communication we can give you that! We stand by our services; we work hard to make sure you’re safe to the greatest degree possible. We will provide your Employees a knowledge to ensure all mechanical and physical aspects are covered for personal safety and health. We offer a full spectrum of services in keeping with the highest standards.\r\n

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

We are certified to teach classes by industry leading agencies

\r\n
\r\n
\r\n {\r\n agencyInfo.map( ({name, description, logo, classesAvailable}) => (\r\n
\r\n
\r\n {`${name}\r\n
\r\n
\r\n

{description}

\r\n { classesAvailable ? \r\n {`View our ${name} courses`} \r\n :\r\n {`View our courses`}\r\n }\r\n
\r\n
\r\n ))\r\n }\r\n
\r\n
\r\n
\r\n View our policies\r\n
\r\n
\r\n
\r\n)\r\n\r\nexport default About;","/*\r\n uploadData(stage:string, filename:string, data:object)\r\n\r\n downloadData(stage:string)\r\n\r\n deleteData(stage:string, filename:string)\r\n\r\n callFetch(method:string, body:object)\r\n*/\r\n\r\n/**\r\n * TODO\r\n * Create a constructor function that takes in\r\n * - dev bucket name\r\n * - prod bucket name\r\n * - address for the fetch request\r\n * - custom text for error messages\r\n * \r\n * Update get, put, and del methods to us stage to \r\n * determine which bucket to target\r\n * \r\n * Add method for resetting the dev bucket to match\r\n * the prod bucket\r\n */\r\n\r\nclass StorageInterface {\r\n constructor(devAddress, prodAddress, errMessage){\r\n this.devAddress = devAddress;\r\n this.prodAddress = prodAddress;\r\n this.errMessage = errMessage;\r\n }\r\n\r\n callFetch(stage, method, body=null) {\r\n let config = {\r\n method: method,\r\n mode: 'cors',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n }\r\n }\r\n\r\n let fetchAddress = stage === \"dev\" ? this.devAddress : this.prodAddress;\r\n\r\n if (body) {\r\n config.body = JSON.stringify(body);\r\n }\r\n\r\n return fetch(fetchAddress, config)\r\n .then(response => response.json())\r\n .then(response => {\r\n\r\n if (!(response.statusCode && response.statusCode === 200)) {\r\n return this.errMessage;\r\n }\r\n\r\n let calendarData;\r\n \r\n if (response.body) {\r\n calendarData = JSON.parse(response.body);\r\n }\r\n\r\n return calendarData\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n return this.errMessage;\r\n });\r\n }\r\n\r\n\r\n async deleteData(stage, filename) {\r\n let response = await this.callFetch(stage, 'DELETE', { filename });\r\n return response;\r\n }\r\n\r\n\r\n async downloadData(stage) {\r\n let response = await this.callFetch(stage, 'GET');\r\n return response;\r\n }\r\n\r\n\r\n async uploadData(stage, filename, data) {\r\n let response = await this.callFetch(stage, \"POST\", { filename, file: data });\r\n return response;\r\n }\r\n}\r\n\r\n\r\nconst devAddress = \"https://ikgv00tqnh.execute-api.us-east-1.amazonaws.com/beta/storageinterface/dev\";\r\nconst prodAddress = \"https://ikgv00tqnh.execute-api.us-east-1.amazonaws.com/beta/storageinterface/prod\";\r\nconst errMessage = {\r\n line1: \"Sorry an error occured while accessing storage data\",\r\n line2: \"Please try again later or send us an email at kimsha@essentialsafety.nyc\"\r\n};\r\n\r\n\r\nlet storageInterface = new StorageInterface(\r\n devAddress,\r\n prodAddress,\r\n errMessage\r\n);\r\n\r\n\r\n\r\n\r\nexport default storageInterface;","const courseData = [\r\n {\r\n agency: \"OSHA\",\r\n category: [\r\n {\r\n categoryName: \"Safety Outreach Training\",\r\n overview: \"We teach workers how to identify and avoid common safety and health risks in the workplace. We provide OSHA-authorized training to workers in construction and general industry. The 10-hour courses are designed for entry-level workers, and 30-hour courses are for supervisors or workers with safety responsibilities.\",\r\n courseInfo: [\r\n {title: \"10 hour - Construction\", details: { }},\r\n {title: \"30 hour - Construction\", details: { }},\r\n {title: \"10 hour - General Industry\", details: { }}, \r\n {title: \"30 hour - General Industry\", details: { }}, \r\n ]\r\n }\r\n ]\r\n }, \r\n {\r\n agency: \"ATSSA\",\r\n category: [\r\n {\r\n categoryName: \"Flagger Training\",\r\n overview: `Learn how to be a safe and effective flagger with ATSSA's flagger training courses. Understand why proper flagger operations are important and learn the standard skillset of a good flagger. Apply and identify standard flagger control references and learn standard flagger practices for various situations.`,\r\n courseInfo: [\r\n {title: \"4 hour - flagging\", details: { }}\r\n ]\r\n }\r\n ]\r\n },\r\n {\r\n agency: \"DOB\",\r\n category: [\r\n {\r\n categoryName: \"Safety Courses\",\r\n overview: \"\",\r\n courseInfo: [\r\n {\r\n title: \"40-Hour Site Safety Manager\", \r\n details: { \r\n Description: \"This course is a comprehensive review of Chapter 33 and the Rules of the City of New York that pertain to public protection during construction. The purpose of the course is to provide training with regards to construction on major buildings, that may be classified by the New York City Building Department, with emphasis on providing not only safety for the public and adjoining property, but to provide safety for worker within the job site as per OSHA requirements. This course is one of the pre-requisites an applicant must successfully complete before being eligible to apply for Site Safety Manager Certificate Examination. In addition, this course fulfills one of the training course requirements for Site Safety Coordinator and Construction Superintendent Certification in New York City depending on experience. The goal of this course is to provide participants with knowledge of the code requirements of the New York City Buildings Department, New York City Rules, to provide Pedestrians, Adjacent Buildings and Worker with safe work environment both in and around construction sites.\", \r\n CEU: \"4.0\", \r\n Length: \"40 Hours\", \r\n Languages: \"English\", \r\n Price: \"$750.00\"\r\n }\r\n },\r\n {\r\n title: \"8-Hour Site Safety Manager Refresher / Chapter 33\", \r\n details: { \r\n Description: \"This course is a refresher to the 40-Hour Site Safety Manager Course, which is a comprehensive presentation of Chapter 33 and the public protection-pertaining Rules of the City of New York. Students will review the hazards of working in the NYC construction environment and the necessary methods and work practices on an urban construction site. This program is most applicable for: Experienced Construction Workers, Supervisors, Other personnel with worker and public safety responsibility for construction activities with general knowledge of the NYC Building Codes, Individuals applying for a Site Safety Training Card.\", \r\n CEU: \"0.8\", \r\n Length: \"8 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$220.00\"\r\n }\r\n },\r\n {\r\n title: \"8-Hour Site Safety Coordinator\", \r\n details: { \r\n Description: \"The 8 hour Site Safety Coordinator Course is a shortened version of the 40 hour Site Safety Manager course for licensed architects and engineers, and workers with experience in construction supervision or safety professionals. It is a comprehensive review of Chapter 33 and the Rules of the City of New York that pertain to public protection. This course provides students with safe job practices in New York City. They will be introduced to the hazards of working in the New York City construction environment and the specific methods and work practices that are necessary on an urban construction site. This course is one of the requirements all applicants must successfully complete in order to apply for Site Safety Coordinator or to register or renew for a Construction Superintendent license with the New York City Department of Buildings. Students will receive a certificate of completion.\", \r\n CEU: \"0.8\", \r\n Length: \"8 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$250.00\"\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n categoryName: \"Scaffold Courses\",\r\n overview: \"\",\r\n courseInfo: [\r\n {\r\n title: \"4-Hour Supported Scaffold User & Refresher\", \r\n details: { \r\n Description: \"Course Description: This course covers the basic elements of supported scaffold safety and introduces students to the nature of supported scaffold hazards. It is applicable for any individual who needs to use or work on a Supported Scaffold in NYC. Particular emphasis is placed on the role of the scaffold user in accident prevention, including: Scaffold inspections, fall protection, recognizing hazards, Responding to emergencies.\", \r\n CEU: \"0.4\", \r\n Length: \"4 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$150.00\"\r\n }\r\n },\r\n {\r\n title: \"8-Hour Supported Scaffold Installer & Remover Refresher\", \r\n details: { \r\n Description: \"This course is a requirement for an individual to maintain his/her designation as a Supported Scaffold Installer & Remover in NYC. In this course, we will cover topics such as; general overview of scaffolding, OSHA 1926 review, NYC Construction Codes Overview, DOB Overview, general principles of fall protection, PPE & Fall arrest system. Students will also cover the necessary safety checklist items from Pre-Start, Erection & Dismantling.\", \r\n CEU: \"0.8\", \r\n Length: \"8 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$220.00\"\r\n }\r\n },\r\n {\r\n title: \"8-Hour Suspended Scaffold User Refresher\", \r\n details: { \r\n Description: \"Students, in this course will learn how to properly inspect the necessary scaffold equipment. They will also be able to identify the basic scaffold components, execute safe installation and removal of the equipment.\", \r\n CEU: \"0.8\", \r\n Length: \"8 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$220.00\"\r\n }\r\n },\r\n {\r\n title: \"8-Hour Suspended Scaffold Supervisor Refresher\", \r\n details: { \r\n Description: \"In this course, it is a requirement for an individual to maintain his/her designation as a suspended scaffold supervisor in NYC.\", \r\n CEU: \"0.8\", \r\n Length: \"8 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$220.00\"\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n categoryName: \"SST Prescribed Courses\",\r\n overview: \"Site Safety Training (SST) Courses\",\r\n courseInfo: [\r\n {\r\n title: \"2-Hour Site Safety Plan (SSP)\", \r\n details: { \r\n Description: \"Course Description: This is an elective course that can help fulfill the requirement for an individual applying for a Site Safety Training Card. This is an awareness training only and does not provide any other qualification or authorization outside of the Site Safety Training Card. Some topics covered in this course include; fences & gates, viewing panels, use of flaggers, crane swings & staging areas, sheeting/shorting, foundation/excavation, lot dimension and lot lines (meets & bounds) horizontal netting, ramps (ratio: slope) and many more. This course is part of the curriculum to satisfy SST 32 Supervisor Card – refer to for pricing. \", \r\n CEU: \"0.2\", \r\n Length: \"2 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$65.00\"\r\n }\r\n },\r\n {\r\n title: \"2-Hour Drug and Alcohol Awareness\", \r\n details: { \r\n Description: \"This course addresses substance and alcohol abuse in the workplace, particularly focusing on safety and productivity hazards caused by it. This course is required for any worker or supervisor employed within the Five Boroughs of NYC on projects requiring a Construction Super, Site Safety Manager, Site Safety Coordinator, Concrete Safety manager, or Competent Person. It is also applicable to those seeking a more thorough understanding of their role in initiating and maintaining drug-free workplace policies. This course is part of the curriculum to satisfy SST 10 and 32 Supervisor Card refer to for pricing.\", \r\n CEU: \"0.2\", \r\n Length: \"2 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$65.00\"\r\n }\r\n },\r\n {\r\n title: \"2-Hour Pre-Task Meeting \", \r\n details: { \r\n Description: \"Course Description: This is a general elective course that can help fulfill the requirement for an individual applying for a site safety training card. This is an awareness level training only and does not provide any other qualification or authorization outside of the Site Safety Training Card. In this course, students will learn topics such as; Pre-Task meeting necessities, Roles & Responsibilities of a Competent Person, Hierarchy of Controls, Components of a Pre-Task Meeting, Number of Pre-Task Meetings, Potential Human Error Traps when Performing Pre-Task Meetings and many more. This course is part of the curriculum to satisfy SST 32 Supervisor Card.\", \r\n CEU: \"0.2\", \r\n Length: \"2 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$65.00\"\r\n }\r\n },\r\n {\r\n title: \"2-Hour Tool-Box Talks\", \r\n details: { \r\n Description: \"Course Description: this course is a general elective course that can help fulfill the requirement for an individual applying for a site safety training card. This is an awareness level training only and does not provide any other qualification or authorization outside of the site safety training card. Some topics covered in this module are; Roles & Responsibilities of a Competent Person, Potential Hazards, Where to Perform Toolbox Talks and many more. This course is part of the curriculum to satisfy SST 32 Supervisor Card.\", \r\n CEU: \"0.2\", \r\n Length: \"2 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$65.00\"\r\n }\r\n },\r\n {\r\n title: \"4-Hour Fall Prevention\", \r\n details: { \r\n Description: \"Course Description: This awareness-level only training course is intended to educate how to avoid accidents and injuries while working on roofs, leading edges, ladders or scaffolds by defining the regulations and safety rules associated with fall hazards on construction sites. An overview of essential fall hazards and prevention, will be covered in this section under the OSHA and DOB regulations. This program is most applicable for any personnel that may be exposed to heights or work around fall hazards in construction sites.\", \r\n CEU: \"0.4\", \r\n Length: \"4 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$150.00\"\r\n }\r\n },\r\n {\r\n title: \"8-Hour Fall Prevention\", \r\n details: { \r\n Description: \"This awareness level is a prerequisite for some construction, demolition workers and supervisors at certain construction sites within 5 boroughs of NYC to obtain a Site Safety Training card. Trainees will become generally familiar with terms associated with fall hazards and controls in the construction industry as they pertain to construction in New York City; will be able to recognize and avoid fall hazards and prevent fall-related incidents from occurring or causing harm; learn of roles, responsibilities and accountabilities of various individuals on a construction site. Course curriculum also includes a review of regulatory safety requirements associated with falls and decision-making when working at heights.\", \r\n CEU: \"0.8\", \r\n Length: \"8 Hours\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$225.00\"\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n categoryName: \"SST General Electives\",\r\n overview: \"Site Safety Training (SST) Courses\",\r\n courseInfo: [\r\n {\r\n title: \"1-Hour Electrocution Prevention\", \r\n details: { \r\n Description: \"This course is a general elective course that can help fulfill the requirement for an individual applying for a Site Safety Training Card. THIS IS AN AWARENESS LEVEL TRAINING ONLY and does not provide any other qualification or authorization outside of the Site Safety Training Card. Trainees will become generally familiar with terms and the phenomenon of electricity and how it causes harm, and will be able to recognize electrical hazards and error traps associated with the potential for electricity to do harm. Trainees should also become aware of administrative regulatory safety requirements associated with electricity.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Fire Protection and Prevention\", \r\n details: { \r\n Description: \"1-Hour Fire Protection And Prevention training course will describe the different types of fires and how to extinguish them safely to prevent damages and injuries on the work site.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour First Aid and CPR\", \r\n details: { \r\n Description: \"This 1-Hour First Aid And CPR training course will cover the \timportance of having a first aid kit on hand at all construction sites in case of an \temergency, describes the legal issues of applying first aid, goes over the required \tcomponents of a first aid kit, and describes when and how to administer cardio-\tpulmonary resuscitation or CPR.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Handling Heavy Materials and Proper Lifting Techniques \", \r\n details: { \r\n Description: \"This course is a general elective course students will learn about proper lifting and handling techniques for different types of heavy materials. They will also learn about the signs of overexertion and musculoskeletal stress caused by improper lifting and handling. Students will learn how to avoid injuries from improper lifting and handling, such as back sprains, pulled muscles, joint injuries, spinal injuries, hernias, and struck-by accidents.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Materials Handling, Storage, Use and Disposal\", \r\n details: { \r\n Description: \"As a construction worker, it’s important to understand how to prevent fire hazards, fall hazards, struck-by hazards, and control pests. In order to do this, workers must learn how to safely handle, store, use, and dispose of different materials.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Protection from Sun Exposure\", \r\n details: { \r\n Description: \"The 1-Hour Protection From Sun Exposure covers the different dangers related to heat and sun exposure, as well as how to prevent these dangers.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Repetitive Motion Injuries \", \r\n details: { \r\n Description: \"The 1-Hour Repetitive Motion Injuries training course teaches \tabout what repetitive motions are and the consequences of them.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Stairways and Ladders\", \r\n details: { \r\n Description: \"This SST course covers the different hazards associated with using stairways and ladders, and how to prevent different types of injuries from them.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Tools – Hand and Power\", \r\n details: { \r\n Description: \"In this SST course, students will learn to recognize hazards and how to safely use a variety of hand and power tools. Students will learn about the potential injuries and health conditions caused by the misuse of different tools, and how to properly use and store tools to prevent accidents.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n }\r\n ]\r\n },\r\n {\r\n categoryName: \"SST Specialized Elective Courses\",\r\n overview: \"Site Safety Training (SST) Specialized Elective Courses\",\r\n courseInfo: [\r\n {\r\n title: \"1-Hour Asbestos / Lead Awareness \", \r\n details: { \r\n Description: \"During this course students will become familiar with the potential health hazards in the workplace from asbestos and lead based products. Students will learn how to recognize the places and locations where asbestos and lead are found in the construction industry in materials and also become aware of safety requirements associated with asbestos and lead on jobsites and in the workplace.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Confined Space Entry \",\r\n details: { \r\n Description: \"this course is designed for safety training awareness purposes only, and is not permitted for workers who need to enter confined or permit entry spaces.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Concrete and Masonry Construction\", \r\n details: { \r\n Description: \"In the 1-Hour Concrete and Masonry Construction training course, students will learn about the different processes involved in casting concrete, different hazards associated with casting concrete, and how to avoid health issues from working with concrete.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Demolition Safety\", \r\n details: { \r\n Description: \"During the 1-Hour Demolition Safety training course, students will learn about the different hazards associated with demolition activities, how to recognize signs of these hazards, the different methods and practices for demolition activities, as well as the required safety protocols to keep the environment free from hazards to avoid injury.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Ergonomics\", \r\n details: { \r\n Description: \"In the ergonomics training course, students will learn about the importance and application of ergonomics in the workplace. We will cover the proper use of tools, equipment, and machine controls; proper lifting techniques, and proper ways to move between tasks. This OSHA training course also covers how to avoid pain and injury, recognizing the early signs of musculoskeletal disorders (MSDs), reporting MSDs, and reporting and treating work-related injuries or illness.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Excavations\", \r\n details: { \r\n Description: \"If your construction team works on excavation or underpinning activities, it’s important for them to understand the different terms associated with the activities.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Job Hazard Analysis\", \r\n details: { \r\n Description: \"The 1-Hour Job Hazard Analysis training course is perfect for learning about a variety of potential hazards on the construction site.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Personnel Lifts / Aerial Lifts / Scissor Lifts and Mobile Scaffolds\", \r\n details: { \r\n Description: \"This is an awareness level training only and does not provide any other qualification or authorization outside of the site safety training card. Topics covered in this section will include; different type of personnel lifts associated with hazards, falls from lift to lower level, struck by falling objects from personal lifts, electrical hazards, loading, operating traveling and overhead protection when using lifts.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Motor Vehicles, Mechanized Equipment and Marine Operations; Rollover Protective Structures and Overhead Protection; and Signs, Signals and Barricades\", \r\n details: { \r\n Description: \"In the 1-Hour Motor Vehicles, Mechanized Equipment And Marine Operations; Rollover Protective Structures And Overhead Protection; Signs, Signals, And Barricades training course, students will learn about different types of mechanized equipment, terms associated with the equipment, and safety controls they should use when operating such equipment.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Risk Assessment and Accident Investigation\", \r\n details: { \r\n Description: \"In the 1-Hour Risk Assessment And Accident Investigation training course, students will learn about the difference between an accident and an incident, what a near miss is, the signs of a deficient observation, identify direct and indirect causes, assess contributing factors, discover the root causality, discuss the “tempting but,” review objectivity versus subjectivity, and go over proactive and reactive decision-making.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"1-Hour Health and Safety Programs in Construction\", \r\n details: { \r\n Description: \"In the 1-Hour Health and Safety Programs In Construction training course, students will become familiar with the different Health And Safety Programs or HASP.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n },\r\n {\r\n title: \"2.50-Hour Foundations for Safety Leadership \", \r\n details: { \r\n Description: \"If you’re trying to improve your leadership skills, then the 2.5-\tHour Foundations for Safety Leadership training course is the perfect way to improve \tyour leadership techniques.\", \r\n CEU: \"0.1\", \r\n Length: \"1 Hour\", \r\n Languages: \"English, Spanish\", \r\n Price: \"$50.00\"\r\n }\r\n }\r\n ]\r\n }\r\n ]\r\n }\r\n]\r\n\r\nexport default courseData;","/**\r\n * TODOs\r\n * create form to create/update the calendar\r\n * - date\r\n * - class name\r\n * - time \r\n * - location\r\n * auto fill classes from the courseData for class to add to calendar\r\n * upload the updated calendar data to s3\r\n * \r\n */\r\n\r\nimport React, { useState, useEffect } from 'react';\r\n\r\nimport StorageInterface from \"../../api scripts/storageInterface\";\r\nimport CaledarInterface from \"../../api scripts/calendarInterface\";\r\n\r\nimport courseData from \"../../data/coursesData\";\r\n\r\n\r\nconst Admin = ({allCalendarData, viewMonth, viewYear, monthData}) => {\r\n\r\n function radioClickHandler(evt) {\r\n let unSelectedRadioElemId = evt.target.id === \"class-select_radio\" ? \"class-input_radio\" : \"class-select_radio\";\r\n let selectedInputElemId = evt.target.id === \"class-select_radio\" ? \"class-select\" : \"class-input\";\r\n let unSelectedInputElemId = evt.target.id === \"class-select_radio\" ? \"class-input\" : \"class-select\";\r\n const unSelectedRadioElem = document.getElementById(unSelectedRadioElemId);\r\n const selectedInputElem = document.getElementById(selectedInputElemId);\r\n const unSelectedInputElem = document.getElementById(unSelectedInputElemId);\r\n\r\n unSelectedRadioElem.checked = false;\r\n selectedInputElem.disabled = false;\r\n unSelectedInputElem.disabled = true;\r\n }\r\n\r\n\r\n const [daysInMonth, setDaysInMonth] = useState([]);\r\n\r\n function dateSelectHandler(evt) {\r\n const yearSelectElem = document.getElementById(\"year-select\");\r\n const monthSelectElem = document.getElementById(\"month-select\");\r\n if (yearSelectElem.value !== \"\" && monthSelectElem.value !== \"\") {\r\n const dayCount = new Date(yearSelectElem.value, parseInt(monthSelectElem.value) + 1, 0).getDate();\r\n const buildDaysInMonth = [];\r\n for (let i = 1; i < dayCount + 1; i++) {\r\n buildDaysInMonth.push(i);\r\n }\r\n setDaysInMonth(buildDaysInMonth);\r\n }\r\n }\r\n\r\n\r\n function submitHandler (evt) {\r\n evt.preventDefault();\r\n console.log(\"Submitting Form data!\", evt);\r\n }\r\n\r\n\r\n useEffect(() => {\r\n\r\n }, [daysInMonth]);\r\n\r\n\r\n const selectInfo = [];\r\n \r\n (() => {\r\n courseData.forEach( agency => {\r\n agency.category.forEach(category => {\r\n category.courseInfo.forEach(course =>{\r\n selectInfo.push(course.title)\r\n })\r\n })\r\n })\r\n })();\r\n\r\n function startTimeChangeHandler(evt) {\r\n evt.preventDefault();\r\n const startTimeElem = document.getElementById(\"startTime-input\");\r\n const stopTimeElem = document.getElementById(\"stopTime-input\");\r\n console.log(startTimeElem.value, evt);\r\n // const\r\n }\r\n\r\n return (\r\n
\r\n

The Form

\r\n
submitHandler(evt) }>\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n radioClickHandler(evt)}\r\n />\r\n \r\n
\r\n \r\n radioClickHandler(evt)} />\r\n \r\n
\r\n \r\n startTimeChangeHandler(evt)} />\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 Admin;","import React from 'react';\r\n\r\nconst Event = ({event}) => {\r\n let { courseName, startTime, endTime, locationLine1, locationLine2} = event;\r\n return (\r\n
\r\n

{`${courseName}`}

\r\n

{`${startTime} - ${endTime}`}

\r\n {/*

{locationLine1}

\r\n

{locationLine2}

*/}\r\n
\r\n )\r\n}\r\n\r\nexport default Event;","import React from 'react';\r\n\r\nconst Holiday = ({holiday, message}) => (\r\n <>\r\n {\r\n holiday ?\r\n <>\r\n

{holiday}

\r\n

{message}

\r\n \r\n :\r\n null\r\n }\r\n \r\n);\r\n\r\nexport default Holiday;","import React, { useRef, useLayoutEffect, useState } from 'react';\r\nimport Event from './Event';\r\nimport Holiday from './Holiday';\r\n\r\nconst dayClickHandler = (date, clickable, monthName, history, isAdmin) => {\r\n if (clickable) {\r\n history.push(`/calendar/${isAdmin ? \"admin/\": \"\"}${monthName}/${date}`);\r\n } else {\r\n return\r\n }\r\n}\r\n\r\n\r\nconst handleHover = (overflowCheck, dateId) => {\r\n if (overflowCheck) {\r\n document.getElementById(dateId).classList.toggle(\"dayWrapOverflowFade\");\r\n }\r\n}\r\n\r\n\r\nconst Day = ({ dayData, monthName, history, match }) => {\r\n let { date, holiday, message, events } = dayData;\r\n const isAdmin = match.path === \"/calendar/admin\";\r\n const clickable = date !== null && (events.length > 0 || holiday || isAdmin);\r\n const [overflowCheck, setOverflowCheck] = useState(false);\r\n const dateId = `day${date}`;\r\n const dayElem = useRef(null);\r\n\r\n useLayoutEffect(() => {\r\n if (dayElem.current.clientHeight < dayElem.current.scrollHeight) {\r\n setOverflowCheck(true);\r\n }\r\n },[overflowCheck]);\r\n\r\n return (\r\n <>\r\n
dayClickHandler(\r\n date, \r\n clickable,\r\n monthName, \r\n history,\r\n isAdmin)}\r\n onMouseEnter={() => handleHover(overflowCheck, dateId) }\r\n onMouseLeave={() => handleHover(overflowCheck, dateId) }>\r\n

{date}

\r\n \r\n {\r\n events.map((event, index) => (\r\n \r\n ))\r\n }\r\n {\r\n overflowCheck ?\r\n

{`Click to see more`}

\r\n :\r\n null\r\n }\r\n
\r\n \r\n ) \r\n}\r\n\r\nexport default Day;","import React from 'react';\r\nimport Day from './Day';\r\n\r\nconst Week = ({daysInWeek, weekNum, monthName, history, match}) => {\r\n\r\n return (\r\n
\r\n {\r\n daysInWeek.map((dayData, index) => (\r\n \r\n ))\r\n }\r\n
\r\n )\r\n}\r\n\r\nexport default Week;","import React from 'react';\r\nimport { daysOfWeek } from \"./Month\";\r\n\r\n\r\n\r\nconst SingleDay = ({adminFuncs, singleDayData, monthName, history, isAdmin}) => {\r\n let { dayOfWeek, date, holiday, message, events } = singleDayData;\r\n\r\n // const addClassHandler = () => {\r\n // console.log(`Add a class to ${monthName} the ${date}`);\r\n // }\r\n\r\n // const removeClassHandler = (eventNo) => {\r\n // console.log(`Remove class ${eventNo} from ${monthName} the ${date}`);\r\n // }\r\n\r\n // const updateClassHandler = (eventNo) => {\r\n // console.log(`Update class ${eventNo} from ${monthName} the ${date}`);\r\n // }\r\n\r\n const handleCloseSingleDay = () => {\r\n history.goBack();\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n

{`${daysOfWeek[dayOfWeek].full} ${monthName} ${date}`}

\r\n {handleCloseSingleDay()}} >\r\n \r\n\r\n
\r\n

{`${events.length} ${events.length > 1 ? \"classes\" : \"class\"}`}

\r\n
\r\n {\r\n holiday ? \r\n <>\r\n

{holiday}

\r\n

{message}

\r\n \r\n : null\r\n }\r\n {\r\n events.length > 0 ?\r\n events.map(({courseName, startTime, endTime, locationLine1, locationLine2}, index) => (\r\n
\r\n

{courseName}

\r\n

{`From ${startTime} - ${endTime}`}

\r\n

{locationLine1}

\r\n

{locationLine2}

\r\n {\r\n isAdmin ?\r\n
\r\n \r\n \r\n
\r\n : null\r\n }\r\n
\r\n ))\r\n :\r\n
\r\n

No classes scheduled

\r\n
\r\n }\r\n {\r\n isAdmin ?\r\n
\r\n \r\n
\r\n : null\r\n }\r\n
\r\n
\r\n ) \r\n}\r\n\r\nexport default SingleDay;","import React from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport Week from \"./Week\";\r\nimport SingleDay from './SingleDay';\r\n\r\n\r\nexport let daysOfWeek = {\r\n 0: { full: 'Sunday', abrv: 'Sun' },\r\n 1: { full: 'Monday', abrv: 'Mon' },\r\n 2: { full: 'Tuesday', abrv: 'Tues' },\r\n 3: { full: 'Wednesday', abrv: 'Weds' },\r\n 4: { full: 'Thursday', abrv: 'Thurs' },\r\n 5: { full: 'Friday', abrv: 'Fri' },\r\n 6: { full: 'Saturday', abrv: 'Sat' }\r\n}\r\n\r\nfunction Month (props) {\r\n let { history, match, adminFuncs, monthInWeeks, monthData } = props;\r\n let { selectedMonth, selectedDay } = match.params;\r\n let singleDayData;\r\n\r\n if (selectedMonth !== undefined && selectedDay !== undefined) {\r\n singleDayData = monthData.days[selectedDay - 1];\r\n }\r\n\r\n let monthName = monthData.monthName;\r\n let year = monthData.year;\r\n\r\n\r\n return (\r\n
\r\n
\r\n

Previous

\r\n

{`${monthName} ${year}`}

\r\n

Next

\r\n
\r\n
\r\n }\r\n />\r\n\r\n }\r\n />\r\n\r\n
\r\n {\r\n Object.values(daysOfWeek).map(dayOfWeek => (\r\n
\r\n

{dayOfWeek.full}

\r\n

{dayOfWeek.abrv}

\r\n
\r\n ))\r\n }\r\n
\r\n
\r\n {\r\n monthInWeeks.map((week, index) => )\r\n }\r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default Month;","import React, { Component } from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport SectionImg from \"../SectionImg\";\r\nimport Month from \"./Month\";\r\nimport Admin from \"./Admin\";\r\n\r\nimport StorageInterface from \"../../api scripts/storageInterface\";\r\nimport CalendarInterface from \"../../api scripts/calendarInterface\";\r\n\r\n\r\nclass Calendar extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n viewYear: new Date().getFullYear(),\r\n viewMonth: new Date().getMonth(),\r\n allCalendarData: {}\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n this.setCurrentDateToState();\r\n let calendarData = await this.getCalendarData();\r\n if (calendarData) {\r\n this.setCalendarDataToState(calendarData);\r\n }\r\n console.log(\"the state is: \", this.state);\r\n }\r\n\r\n async getCalendarData() {\r\n let dl = await StorageInterface.downloadData('prod');\r\n if (dl.data !== undefined){\r\n return dl.data;\r\n } else {\r\n return this.makeCalendarData();\r\n }\r\n }\r\n\r\n makeCalendarData() {\r\n const viewYear = new Date().getFullYear();\r\n const viewMonth = new Date().getMonth();\r\n console.log(\"making the calendarData for: \", viewYear, viewMonth);\r\n return [\r\n new CalendarInterface(viewYear, viewMonth)\r\n .exportMonthData()\r\n ];\r\n }\r\n\r\n setCalendarDataToState(calendarData) {\r\n\r\n this.setState((state, props) => {\r\n const stateCalendarData = state.allCalendarData;\r\n\r\n calendarData.forEach(month => {\r\n const {year, monthNo} = month;\r\n\r\n if (!stateCalendarData[year]) stateCalendarData[year] = {};\r\n stateCalendarData[year][monthNo] = month;\r\n });\r\n\r\n return {allCalendarData: stateCalendarData};\r\n });\r\n\r\n }\r\n\r\n\r\n setCurrentDateToState() {\r\n this.setState({\r\n viewYear: new Date().getFullYear(),\r\n viewMonth: new Date().getMonth()\r\n });\r\n }\r\n\r\n\r\n fillExtraSpacesOnCalendar(monthData) {\r\n let buffer = { \"dayOfWeek\": null,\r\n \"date\": null,\r\n \"holiday\": false,\r\n \"message\": null,\r\n \"events\": [] };\r\n \r\n let bufferCount = monthData.days[0].dayOfWeek;\r\n let bufferedMonth = monthData.days.slice();\r\n\r\n for (let i = 0; i < bufferCount; i++){\r\n bufferedMonth.unshift(buffer);\r\n }\r\n\r\n while (bufferedMonth.length % 7 !== 0) {\r\n bufferedMonth.push(buffer);\r\n }\r\n\r\n return bufferedMonth;\r\n }\r\n\r\n\r\n breakMonthIntoWeeks(bufferedMonth) {\r\n let monthInWeeks = [];\r\n\r\n for (let i = 0; i < bufferedMonth.length; i += 7) {\r\n monthInWeeks.push(bufferedMonth.slice(i, i + 7))\r\n }\r\n\r\n return monthInWeeks;\r\n }\r\n\r\n\r\n getMonthInWeeks(monthData) {\r\n const bufferedMonth = this.fillExtraSpacesOnCalendar(monthData);\r\n const monthInWeeks = this.breakMonthIntoWeeks(bufferedMonth);\r\n return monthInWeeks;\r\n }\r\n\r\n getMonthData() {\r\n const { allCalendarData, viewMonth, viewYear } = this.state;\r\n let monthData;\r\n if (allCalendarData[viewYear] !== undefined && \r\n allCalendarData[viewYear][viewMonth] !== undefined) {\r\n monthData = allCalendarData[viewYear][viewMonth];\r\n }\r\n return monthData;\r\n }\r\n\r\n setMonthData(monthData) {\r\n const { allCalendarData, viewMonth, viewYear } = this.state;\r\n if (allCalendarData[viewYear] !== undefined && \r\n allCalendarData[viewYear][viewMonth] !== undefined) {\r\n // TODO set allCalendarData back to the state\r\n allCalendarData[viewYear][viewMonth] = monthData;\r\n }\r\n this.setCalendarDataToState(allCalendarData);\r\n }\r\n\r\n addClassHandler = (date) => {\r\n console.log(`Add a class to ${JSON.stringify(this.getMonthData().days[date -1])}`);\r\n }\r\n\r\n removeClassHandler = (eventNo, date) => {\r\n const monthData = this.getMonthData();\r\n const calendarInterface = new CalendarInterface();\r\n const month = calendarInterface.importMonthData(monthData);\r\n month.removeEvent(date -1, eventNo);\r\n this.setMonthData(month.exportMonthData());\r\n // TODO - Update the UI when an event is removed \r\n console.log(\">>>>>>>>> events \"+ JSON.stringify(month.getEventsForDay(date -1)));\r\n console.log(`Remove class ${eventNo} from ${monthData.monthName} the ${date}`);\r\n }\r\n\r\n updateClassHandler = (eventNo, date) => {\r\n const monthData = this.getMonthData();\r\n console.log(`Update class ${eventNo} from ${monthData.monthName} the ${date}`);\r\n }\r\n\r\n adminFuncs = {\r\n addClass: this.addClassHandler,\r\n removeClass: this.removeClassHandler,\r\n updateClass: this.updateClassHandler\r\n }\r\n\r\n\r\n render() {\r\n let { history, match } = this.props;\r\n const { allCalendarData, viewMonth, viewYear } = this.state;\r\n const isAdmin = match.path === \"/calendar/admin\";\r\n console.log('in calendar', allCalendarData);\r\n\r\n let monthInWeeks;\r\n let monthData = this.getMonthData();\r\n if (monthData){\r\n monthInWeeks = this.getMonthInWeeks(monthData)\r\n }\r\n \r\n return (\r\n
\r\n \r\n {/* Create popup menu to update classes from clicks on single day\r\n < Route \r\n exact path=\"/calendar/admin\" \r\n render={\r\n () => \r\n } /> */}\r\n {\r\n monthInWeeks !== undefined ?\r\n \r\n :\r\n

Loading...

\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Calendar;","import React from 'react';\r\n\r\nconst ContactModal = ({show, message}) => (\r\n
\r\n

{message.line1}

\r\n

{message.line2}

\r\n
\r\n)\r\n\r\nexport default ContactModal;","import React from 'react';\r\nimport ContactFormModal from \"./ContactFormModal\";\r\n\r\n\r\n\r\nconst ContactForm = ({submitHandler, hideModal, show, message}) => {\r\n\r\n\tfunction formClickHandler() {\r\n\t\tif (show) hideModal();\r\n\t}\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\t\r\n\t\t\t\t
formClickHandler()}>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t submitHandler(evt)}>\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t)}\r\n\r\nexport default ContactForm;","import React, { Component } from 'react';\r\nimport SectionImg from \"./SectionImg\";\r\nimport ContactForm from \"./ContactForm\";\r\n\r\n\r\nclass Contact extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n showModal: false,\r\n modalMessage: {line1: '', line2: ''},\r\n timeoutId: ''\r\n }\r\n\r\n this.submitHandler = this.submitHandler.bind(this);\r\n this.hideModal = this.hideModal.bind(this);\r\n }\r\n\r\n\r\n setModalMessage(line1, line2) {\r\n this.setState({modalMessage: {line1, line2}});\r\n }\r\n\r\n\r\n toggleModal(timeout=4000) {\r\n let timeoutId = setTimeout(() => {\r\n this.setState({showModal: false});\r\n }, timeout);\r\n this.setState({showModal: true, timeoutId});\r\n }\r\n\r\n\r\n clear_form() {\r\n document.getElementById('inputName').value = \"\";\r\n document.getElementById('inputEmail').value = \"\";\r\n document.getElementById('inputSubject').value = \"\";\r\n document.getElementById('inputMessage').value = \"\";\r\n }\r\n\r\n\r\n createAndThrowError(line1, line2) {\r\n let error = new Error();\r\n error.line1 = line1;\r\n error.line2 = line2;\r\n throw error;\r\n }\r\n\r\n\r\n vaildate_form(name, email, subject, message) {\r\n const validator = require(\"email-validator\");\r\n let errors = [];\r\n\r\n if (!name) errors.push(\"a name\");\r\n if (!validator.validate(email)) errors.push(\"a valid email address\");\r\n if (!subject) errors.push(\"a subject\");\r\n if (!message) errors.push(\"a message\");\r\n\r\n if (errors.length > 0) {\r\n let line1 = `Please enter: ${\r\n errors.length > 1 ? errors.join(', '): errors[0]\r\n }`;\r\n let line2 = \"Check these fields and try again\";\r\n this.createAndThrowError(line1, line2);\r\n }\r\n }\r\n\r\n\r\n sendEmail(name, email, subject, message) {\r\n let formData = {name, email, subject, message};\r\n \r\n return fetch('https://ikgv00tqnh.execute-api.us-east-1.amazonaws.com/beta2/sendmail', {\r\n method: 'POST',\r\n mode: 'cors',\r\n headers: {\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(formData)\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if (!(data.statusCode && data.statusCode === 200)) {\r\n let line1 = \"Sorry an error occured while sending your message\";\r\n let line2 = \"Please try again later or send us an email at kimsha@essentialsafety.nyc\";\r\n return { line1, line2 };\r\n }\r\n return null;\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n let line1 = \"Sorry an error occured while sending your message\";\r\n let line2 = \"Please send us an email directly at kimsha@essentialsafety.nyc\";\r\n return { line1, line2 };\r\n });\r\n } \r\n\r\n\r\n async submitHandler(event) {\r\n event.preventDefault();\r\n this.setState({error: null})\r\n \r\n let name = document.getElementById('inputName').value;\r\n let email = document.getElementById('inputEmail').value;\r\n let subject = document.getElementById('inputSubject').value;\r\n let message = document.getElementById('inputMessage').value;\r\n \r\n try {\r\n this.vaildate_form(name, email, subject, message);\r\n let emailError = await this.sendEmail(name, email, subject, message);\r\n if (emailError) {\r\n let { line1, line2 } = emailError;\r\n this.createAndThrowError(line1, line2);\r\n }\r\n let successLine1 = \"Your message has been successfully sent!\";\r\n let successLine2 = \"We will get be in touch with you soon.\";\r\n this.setModalMessage(successLine1, successLine2);\r\n this.toggleModal();\r\n this.clear_form();\r\n } catch(error) {\r\n let { line1, line2 } = error;\r\n this.setModalMessage(line1, line2);\r\n this.toggleModal(5000);\r\n }\r\n }\r\n\r\n\r\n hideModal() {\r\n clearTimeout(this.state.timeoutId);\r\n this.setState({showModal: false});\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n

Send us a message.

\r\n

Fill out the contact form bellow to send us an email to kimsha@essentialsafety.nyc. We usually respond within one business day.

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

Talk to us.

\r\n

(917) 416-5465 Call our office and talk to someone at Essential Safety Communication.

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

See where our offices are located.

\r\n

Our offices are at 256 East 138th Street Bronx, NY 10451. Click here to check us out on Google maps and get directions.

\r\n
\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Contact;","import React from \"react\";\r\n\r\n\r\nconst detailsClickHandler = (idString) => {\r\n console.log(idString);\r\n let elem = document.getElementById(idString);\r\n if (elem) {\r\n console.log(\"idString found\", elem);\r\n elem.classList.toggle(\"coursesShowDetails\");\r\n }\r\n}\r\n\r\n\r\nconst CourseDetails = ({ agency, categoryIndex, courseIndex, details }) => (\r\n
\r\n \r\n \r\n
\r\n)\r\n\r\nexport default CourseDetails;","import React from \"react\";\r\nimport CourseDetails from \"./CourseDetails\";\r\n\r\n\r\nconst CourseInfo = ({ courseInfo, agency, categoryIndex }) => {\r\n \r\n return (\r\n <>\r\n {\r\n courseInfo.map(({title, details}, courseIndex) => {\r\n let courseDetailsPresent = Object.keys(details).length > 0;\r\n return (\r\n
  • \r\n

    {title}

    \r\n {\r\n courseDetailsPresent ? \r\n \r\n :\r\n null\r\n }\r\n
  • \r\n )\r\n })\r\n }\r\n \r\n )\r\n}\r\n\r\nexport default CourseInfo;","import React from 'react';\r\nimport CourseInfo from \"./CourseInfo\";\r\n \r\n\r\nconst Category = ({ category, agency }) => (\r\n <>\r\n {\r\n category.map(({ categoryName, overview, courseInfo }, categoryIndex) => (\r\n
    \r\n

    {categoryName}

    \r\n

    {overview}

    \r\n \r\n
    \r\n ))\r\n }\r\n \r\n)\r\n\r\nexport default Category;","import React from 'react';\r\nimport Category from \"./Category\";\r\n\r\nimport courseData from \"../../data/coursesData\";\r\n\r\n\r\nconst collapseHandler = (agencyName) => {\r\n const elem = document.getElementById(`${agencyName}categoriesContainer`);\r\n if (elem) {\r\n elem.classList.toggle('collapse');\r\n }\r\n return\r\n}\r\n\r\n \r\nconst Agency = () => (\r\n <>\r\n {\r\n courseData.map(({ agency, category }) => (\r\n
    \r\n

    collapseHandler(agency)}>{`${agency} Courses`}

    \r\n
    \r\n \r\n
    \r\n
    \r\n ))\r\n }\r\n \r\n)\r\n\r\nexport default Agency;","import React, { useEffect } from 'react';\r\nimport SectionImg from '../SectionImg';\r\nimport Agency from './Agency';\r\n\r\n\r\nconst collapseHandler = (agencyName) => {\r\n const elem = document.getElementById(`${agencyName}categoriesContainer`);\r\n if (elem) {\r\n elem.classList.toggle('collapse');\r\n }\r\n return\r\n}\r\n\r\n \r\nconst Courses = ({match}) => {\r\n useEffect(() => {\r\n if (match?.params?.agency) {\r\n collapseHandler(match.params.agency);\r\n }\r\n });\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n \"student\r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default Courses;","//id is the key and li element's id\r\n//name is the text that will appear for the link\r\n//link is the value given to the href attribute\r\n\r\nconst linkInfo = [\r\n {id: 'home', name: 'Home', link: '/'},\r\n {id: 'about', name: 'About', link: '/about'},\r\n {id: 'courses', name: 'Courses', link: '/courses'},\r\n {id: 'contact', name: 'Contact', link: '/contact'},\r\n {id: 'calendar', name: 'Calendar', link: '/calendar'}\r\n]\r\n\r\nexport default linkInfo;","import React from 'react';\r\nimport { NavLink } from 'react-router-dom';\r\n\r\nimport linkInfo from '../data/navBarData';\r\n\r\nconst Footer = () => (\r\n
    \r\n
    \r\n
    \r\n
    \r\n
      \r\n {linkInfo.map(({id, name, link, index}) => (\r\n
    • \r\n

      {name}

      \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 \"OSHA\r\n
    \r\n
    \r\n \"NYC\r\n
    \r\n
    \r\n \"IACET\r\n
    \r\n
    \r\n \"ATSSA\r\n
    \r\n
    \r\n \"NCCER\r\n
    \r\n
    \r\n
    \r\n
    \r\n

    ©copyrights 2020. Essential Safety Communication, Inc.

    \r\n

    Policies

    \r\n
    \r\n
    \r\n)\r\n\r\nexport default Footer;","import React, { Component } from 'react';\r\nimport { NavLink } from 'react-router-dom';\r\n\r\nimport linkInfo from '../data/navBarData';\r\n\r\n\r\nclass Header extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.state = {\r\n mobileMenu: false\r\n }\r\n\r\n this.handleMenuClick = this.handleMenuClick.bind(this);\r\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\r\n this.handleLinkClick = this.handleLinkClick.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({\r\n mobileNavElem: document.getElementById('mobileNav'),\r\n menuIconElem: document.getElementById('menuIcon')\r\n })\r\n }\r\n\r\n closeMobileMenu() {\r\n this.state.mobileNavElem.classList.remove('mobileNavDropEnd');\r\n this.state.mobileNavElem.classList.add('mobileNavDropStart');\r\n let elem = this.state.menuIconElem;\r\n elem.style.color = 'black';\r\n this.setState({mobileMenu: false});\r\n }\r\n\r\n openMobileMenu() {\r\n this.state.mobileNavElem.classList.remove('mobileNavDropStart');\r\n this.state.mobileNavElem.classList.add('mobileNavDropEnd');\r\n let elem = this.state.menuIconElem;\r\n elem.style.color = 'white';\r\n this.setState({mobileMenu: true});\r\n }\r\n\r\n handleMouseLeave() {\r\n this.closeMobileMenu();\r\n }\r\n\r\n handleMenuClick() {\r\n if (this.state.mobileMenu === true) this.closeMobileMenu();\r\n else this.openMobileMenu();\r\n }\r\n\r\n handleLinkClick() {\r\n this.closeMobileMenu();\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n )\r\n }\r\n\r\n}\r\n\r\nexport default Header","import React from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\n\r\nconst HomeHeader = ({ title, imageSrc, history }) => {\r\n return (\r\n
    \r\n \"\"/\r\n

    {title}

    \r\n
    \r\n \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n\r\nexport default withRouter(HomeHeader);","import React, { Component } from 'react';\r\nimport HomeHeader from \"./HomeHeader\";\r\n\r\n\r\nimport '../scss/style.scss';\r\n\r\nclass Home extends Component{\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n testimonialIndex: 0,\r\n testimonials: [\r\n {\r\n quote: \"Kimsha from Essential Safety did a great job. She came to my office and set up gave the training, and my guys finished and they really learned a lot.\",\r\n author: \"William\",\r\n company: \"ESC Cabling INC.\"\r\n },\r\n {\r\n quote: \"Kimsha from Essential Safety is Fantastic. Not only did I go to get my 30 hour, I have sent all of my employees. She has even come to my office to handle the training. You won’t find anyone better A++\",\r\n author: \"Everett\",\r\n company: \"Urban Ecospaces, INC.\"\r\n },\r\n {\r\n quote: \"Kimsha from Essential Safety is so accommodating. I wasn’t sure what I wanted, she came to my office and sat down with me to figure out my needs. I was grateful for the resolution and the prompt instruction she gave my staff, Thanks.\",\r\n author: \"Rosemary\",\r\n company: \"URI INC.\"\r\n },\r\n ]\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.startTestimonials();\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.state.timerId);\r\n }\r\n\r\n startTestimonials() {\r\n let counter = 0;\r\n\r\n const timerId = setInterval( () => {\r\n counter += 1;\r\n if (counter <= 1) {\r\n this.fadeIn();\r\n }else if (counter === 29) {\r\n this.fadeOut();\r\n } else if (counter > 29){\r\n this.nextQuote();\r\n counter = 0;\r\n }\r\n\r\n }, 500);\r\n\r\n this.setState(() => ({\r\n timerId: timerId\r\n }));\r\n }\r\n\r\n nextQuote() {\r\n this.setState((prevState) => {\r\n const nextIndex = prevState.testimonials.length - 1 === prevState.testimonialIndex ? 0 : prevState.testimonialIndex + 1;\r\n return {testimonialIndex: nextIndex}\r\n })\r\n }\r\n\r\n fadeIn() {\r\n const testimonialsElem = document.getElementById('testimonials');\r\n testimonialsElem.classList.add('fadeIn');\r\n testimonialsElem.classList.remove('fadeOut');\r\n }\r\n\r\n fadeOut() {\r\n const testimonialsElem = document.getElementById('testimonials');\r\n testimonialsElem.classList.add('fadeOut');\r\n testimonialsElem.classList.remove('fadeIn');\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n
    \r\n \r\n
    \r\n
    \r\n

    \r\n People always want security; here at Essential Safety Communication we can give you that!\r\n

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

    \r\n We stand by our services; we work hard to make sure you’re safe to the greatest degree possible. We will provide your Employees a knowledge to ensure all mechanical and physical aspects are covered for personal safety and health. We offer a full spectrum of services in keeping with the highest standards.\r\n

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

    \r\n Testimonials\r\n

    \r\n
    \r\n
    \r\n
    \r\n {this.state.testimonials[this.state.testimonialIndex].quote}\r\n -{this.state.testimonials[this.state.testimonialIndex].author},{this.state.testimonials[this.state.testimonialIndex].company} \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n} \r\n\r\nexport default Home;","export const policies = [\r\n {\r\n policyName: \"Standard Policy\",\r\n description: \"Essential Safety Communication Inc. has a standard policy not to take a vested interest in any product, instrument, device or materials whereby the instructor would be receiving any royalties of profits. All employees and contractual instructors are to adhere to this policy.\"\r\n },\r\n {\r\n policyName: \"Anti-discrimination Policy\",\r\n description: \"Essential Safety Communications Inc. is committed to maintaining a fair and respectful environment for learning. To that end, and in accordance with federal and state law, Essential Safety Communications Inc. prohibits any member of the staff, advisory board, administration, participants, vendors, volunteers, guests, patrons, independent contractors from harassing and/or discriminating against any other member of Essential Safety Communications Inc. community because of that person’s race, sex (including sexual harassment), sexual orientation, gender identity and expression, ethnicity or national origin, religion, age, creed, color genetic information, physical or mental disability, HIV status, or status as a disabled veteran or veteran of the Vietnam era. Incidents of harassment and discrimination will be met with a separation of any and all affiliations.\"\r\n }\r\n]","import React from 'react';\r\nimport SectionImg from './SectionImg';\r\n\r\nimport { policies } from \"../data/policiesData\"\r\n\r\nconst Policies = () => (\r\n
    \r\n \r\n
    \r\n

    Company Policies

    \r\n {\r\n policies.map(({policyName, description}) => (\r\n
    \r\n

    {policyName}

    \r\n

    {description}

    \r\n
    \r\n ))\r\n }\r\n
    \r\n
    \r\n)\r\n\r\nexport default Policies;","import React from 'react';\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport About from \"./Components/About\";\r\nimport Admin from \"./Components/Calendar/Admin\";\r\nimport Calendar from \"./Components/Calendar/Calendar\";\r\nimport Contact from \"./Components/Contact\";\r\nimport Courses from \"./Components/Courses/Courses\";\r\nimport Footer from \"./Components/Footer\";\r\nimport Header from \"./Components/Header\";\r\nimport Home from \"./Components/Home\";\r\nimport Policies from \"./Components/Policies\";\r\n\r\nimport './App.scss';\r\n\r\nfunction App() {\r\n return (\r\n <>\r\n
    \r\n \r\n < Route exact path=\"/\" component={Home} />\r\n < Route path=\"/home\" component={Home} />\r\n < Route path=\"/about\" component={About} />\r\n < Route exact path=\"/calendar\" component={Calendar} />\r\n < Route exact path=\"/calendar/admin\" component={Calendar} />\r\n < Route exact path=\"/calendar/admin/:selectedMonth/:selectedDay\" component={Calendar} />\r\n < Route exact path=\"/calendar/:selectedMonth/:selectedDay\" component={Calendar} />\r\n < Route exact path=\"/admin\" component={Admin} />\r\n < Route exact path=\"/courses\" component={Courses} />\r\n < Route path=\"/courses/:agency\" component={Courses} />\r\n < Route path=\"/contact\" component={Contact} />\r\n < Route path=\"/policies\" component={Policies} />\r\n \r\n