{"version":3,"sources":["component-trading-hours.js"],"names":["ComponentTradingHours","constructor","container","options","this","document","querySelector","Object","assign","endpoint","days","months","tradingHours","setEvents","window","addEventListener","fetch","then","response","json","processTradingHours","let","tradingHour","defaultTradingHours","overrideTradingHours","closedTradingHours","next7Days","startDate","endDate","push","status","date","Date","i","year","getFullYear","month","getMonth","toString","day","getDate","dateFormatted","currentDayName","getDay","monthName","openTime","closeTime","trading","filter","x","indexOf","overrideTrading","length","timeStart","timeEnd","closed","dayName","dayNameShort","substring","monthNameShort","setDate","render","wrapper","createElement","classList","add","index","formatTime","titleColumn","valueColumn","innerHTML","row","appendChild","time","parts","split","hour","parseInt","minute","formattedHour","formattedMinute","suffix"],"mappings":"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","file":"component-trading-hours.min.js","sourcesContent":["export default class ComponentTradingHours {\r\n constructor(container, options) {\r\n this.container = document.querySelector(container);\r\n this.options = Object.assign({\r\n endpoint: '//content.teeg.localhost:5000/api/v1/data/trading-hours/1709',\r\n days: [\r\n 'Sunday',\r\n 'Monday',\r\n 'Tuesday',\r\n 'Wednesday',\r\n 'Thursday',\r\n 'Friday',\r\n 'Saturday'\r\n ],\r\n months: [\r\n 'January',\r\n 'February',\r\n 'March',\r\n 'April',\r\n 'May',\r\n 'June',\r\n 'July',\r\n 'August',\r\n 'September',\r\n 'October',\r\n 'November',\r\n 'December'\r\n ]\r\n }, options);\r\n \r\n this.tradingHours = [];\r\n \r\n this.setEvents();\r\n }\r\n\r\n setEvents() {\r\n window.addEventListener('DOMContentLoaded', () => {\r\n fetch(this.options.endpoint)\r\n .then(response => response.json())\r\n .then(tradingHours => {\r\n this.processTradingHours(tradingHours);\r\n });\r\n });\r\n }\r\n \r\n processTradingHours(tradingHours) {\r\n let defaultTradingHours = [];\r\n let overrideTradingHours = [];\r\n let closedTradingHours = [];\r\n let next7Days = [];\r\n \r\n \r\n for (let tradingHour of tradingHours) {\r\n if(tradingHour.startDate === '0001-01-01' && tradingHour.endDate === '0001-01-01') {\r\n defaultTradingHours.push(tradingHour);\r\n }\r\n else if(tradingHour.status === 'open') {\r\n overrideTradingHours.push(tradingHour);\r\n }\r\n else if(tradingHour.status === 'closed') {\r\n closedTradingHours.push(tradingHour);\r\n }\r\n }\r\n \r\n const startDay = 'Monday';\r\n const date = new Date();\r\n \r\n for(var i = 0; i < 7; i++) {\r\n let year = date.getFullYear();\r\n let month = (date.getMonth() + 1 < 10) ? '0' + (date.getMonth() + 1) : (date.getMonth()+1).toString();\r\n let day = (date.getDate() < 10) ? '0' + date.getDate() : date.getDate().toString();\r\n let dateFormatted = `${year}-${month}-${day}`;\r\n let currentDayName = this.options.days[date.getDay()];\r\n let monthName = this.options.months[date.getMonth()];\r\n let status = 'open';\r\n \r\n let openTime = '';\r\n let closeTime = '';\r\n\r\n let trading = defaultTradingHours.filter(x => x.days.indexOf(currentDayName) > -1);\r\n if(trading.length > 0) {\r\n openTime = trading[0].timeStart;\r\n closeTime = trading[0].timeEnd;\r\n }\r\n\r\n let overrideTrading = overrideTradingHours.filter(x =>\r\n dateFormatted >= x.startDate\r\n && dateFormatted <= x.endDate\r\n && x.days.indexOf(currentDayName) > -1);\r\n if(overrideTrading.length > 0) {\r\n openTime = overrideTrading[0].timeStart;\r\n closeTime = overrideTrading[0].timeEnd;\r\n }\r\n \r\n let closed = closedTradingHours.filter(\r\n x => dateFormatted >= x.startDate\r\n && dateFormatted <= x.endDate\r\n );\r\n if(closed.length > 0) {\r\n status = 'closed';\r\n }\r\n \r\n next7Days.push({\r\n dayName: currentDayName,\r\n dayNameShort: currentDayName.substring(0, 3),\r\n monthName: monthName,\r\n monthNameShort: monthName.substring(0, 3),\r\n dateFormatted,\r\n year,\r\n month,\r\n date: day,\r\n openTime,\r\n closeTime,\r\n status\r\n });\r\n\r\n date.setDate(date.getDate() + 1);\r\n }\r\n \r\n this.tradingHours = next7Days;\r\n \r\n this.render();\r\n }\r\n \r\n render() {\r\n let wrapper = document.createElement('div');\r\n wrapper.classList.add('trading-hours');\r\n \r\n let index = 0;\r\n for(var tradingHour of this.tradingHours) {\r\n const openTime = this.formatTime(tradingHour.openTime);\r\n const closeTime = this.formatTime(tradingHour.closeTime);\r\n \r\n let titleColumn = document.createElement('div');\r\n titleColumn.classList.add('date');\r\n\r\n if(index === 0) {\r\n titleColumn.innerHTML = 'Today';\r\n }\r\n else if(index === 1) {\r\n titleColumn.innerHTML = 'Tomorrow';\r\n }\r\n else {\r\n titleColumn.innerHTML = `${tradingHour.dayNameShort} ${tradingHour.date} ${tradingHour.monthNameShort}`; \r\n }\r\n \r\n\r\n let valueColumn = document.createElement('div');\r\n valueColumn.classList.add('opening-hours');\r\n if(tradingHour.status == 'closed') {\r\n valueColumn.innerHTML = 'closed';\r\n }\r\n else {\r\n valueColumn.innerHTML = `${openTime} - ${closeTime}`;\r\n }\r\n \r\n let row = document.createElement('div');\r\n row.classList.add('trading-row');\r\n \r\n \r\n row.appendChild(titleColumn);\r\n row.appendChild(valueColumn);\r\n\r\n wrapper.appendChild(row);\r\n index++;\r\n }\r\n this.container.innerHTML = '';\r\n this.container.appendChild(wrapper);\r\n }\r\n \r\n formatTime(time) {\r\n const parts = time.split(':');\r\n \r\n const hour = parseInt(parts[0], 10);\r\n let minute = 0;\r\n if(parts.length >= 2) {\r\n minute = parseInt(parts[1], 10)\r\n }\r\n\r\n let formattedHour = '12';\r\n let formattedMinute = '';\r\n let suffix = 'am';\r\n \r\n if(hour === 0) {\r\n formattedHour = '12';\r\n }\r\n else if(hour >= 12) {\r\n suffix = 'pm';\r\n \r\n if(hour > 12) {\r\n formattedHour = (hour - 12).toString();\r\n }\r\n }\r\n else {\r\n formattedHour = hour.toString();\r\n }\r\n \r\n if(minute >= 0) {\r\n formattedMinute = minute < 10 ? '0' + minute : minute.toString();\r\n }\r\n\r\n return `${formattedHour}:${formattedMinute} ${suffix}`;\r\n }\r\n \r\n \r\n}"]}