{"version":3,"sources":["timetableWithSearch.js"],"names":["TimeTableWithSearch","_createClass","t","_classCallCheck","this","target","routeElement","querySelector","fromText","toText","key","value","dateElement","routeSelect","array","find","item","Id","id","initEvents","getDefaultRoute","then","route","_this","mapRoutes","_","loadCrossings","LargeSelectList","routeLargeSelect","dispatchEvent","Event","_this2","initRoutes","evt","innerHTML","options","selectedIndex","dataset","fromValue","toValue","addEventListener","locations","_this3","get","routes","filter","findById","DestinationId","map","DepartureId","concat","Departure","Destination","Value","getRoutes","selectedRoute","data","location","DeparturePoint","departureId","destinationId","year","month","day","date","getHtml","moment","format","split","closest","Date","isSameOrAfter","undefined","dateText","classList","add","tableBody","loader","departure","pop","getMonth","getFullYear","getCrossings","dateNumber","html","remove","cb","arguments","length","text","Name","dataValue","destination","Selected","context","option","appendChild","_this4","getDepartureLocations","addRouteOption","x","fetch","uri","json","window","response","document","container"],"mappings":"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","file":"timetableWithSearch.js","sourcesContent":["TimeTableWithSearch = class {\n constructor(t) {\n this.target = t;\n this.routeElement = this.target.querySelector(\"[name=route]\");\n this.fromText = this.target.querySelector(\"span[data-route-from-text]\");\n this.toText = this.target.querySelector(\"span[data-route-to-text]\");\n this.dateText = this.target.querySelector(\"span[data-date-text]\");\n this.routeLargeSelect = this.target.querySelector(\"[data-select-type=list]\");\n this.dateElement = this.target.querySelector(\"input[name=outboundDate]\");\n this.routeSelect = {};\n\n this.init();\n }\n \n init() { \n this.initRoutes();\n this.initEvents();\n }\n \n findById(array, id) {\n return array.find(item => item.Id === id);\n }\n\n initRoutes() {\n this.getDefaultRoute()\n .then(route => this.mapRoutes(route)\n .then(_ => this.loadCrossings(route)))\n .then(_ => {\n this.routeSelect = new LargeSelectList(this.routeLargeSelect);\n })\n .then(_ => this.routeElement.dispatchEvent(new Event(\"change\")));\n }\n\n initEvents() {\n this.routeElement.addEventListener(\"change\", (evt) => {\n this.fromText.innerHTML = evt.target.options[evt.target.selectedIndex].dataset.fromValue;\n this.toText.innerHTML = evt.target.options[evt.target.selectedIndex].dataset.toValue;\n \n this.loadCrossings();\n });\n \n this.dateElement.addEventListener(\"change\", (evt) => {\n \n this.loadCrossings(evt);\n });\n \n }\n \n getRoutes(locations, selectedRoute) {\n return this.get(\"/Umbraco/Api/DataApi/routes\")\n .then(routes => {\n return routes\n .filter(route => this.findById(locations, route.DepartureId))\n .filter(route => this.findById(locations, route.DestinationId))\n .map(route => {\n let value = `${route.DepartureId},${route.DestinationId}`;\n\n return {\n Departure: this.findById(locations, route.DepartureId),\n Destination: this.findById(locations, route.DestinationId),\n Value: value,\n Selected: value === selectedRoute\n };\n });\n });\n }\n\n getDefaultRoute() {\n return this.get(\"/Umbraco/Api/DataApi/variables/B2CDefaultRoute\");\n }\n\n getLocation(id) {\n return this.get(`/Umbraco/Api/DataApi/Location/${id}`);\n }\n\n getDepartureLocations() {\n return this.get(\"/Umbraco/Api/DataApi/DeparturePoints\")\n .then(data => data.filter(location => location.DeparturePoint));\n }\n \n getCrossings(departureId, destinationId, year, month, day){\n let date = new Date(year, month - 1, day);\n \n return this.getHtml(`/umbraco/surface/TimeTable/TimeTableCrossings?Departure=${departureId}&Destination=${destinationId}&Date=${moment(date).format().split('T')[0]}`);\n }\n\n loadCrossings(evt){\n const dateElement = this.dateElement.closest(\".date-time-picker--date-only\");\n const date = new Date(this.dateElement.value);\n if(moment(date).isSameOrAfter(moment(new Date()),\"day\")){\n if(evt !== undefined && evt.target !== undefined){\n \n this.dateText.innerHTML = new moment(evt.target.value).format(\"Do MMMM YYYY\");\n }\n const routeElement = this.routeLargeSelect.closest(\".large-select-list\");\n dateElement.classList.add(\"disabled\");\n routeElement.classList.add(\"disabled\");\n\n const tableBody = this.target.querySelector(\"[data-timetable]\");\n const loader = this.target.querySelector(\"#processingwait\");\n\n tableBody.innerHTML = \"\";\n loader.style = \"\";\n\n const route = this.routeElement.value;\n\n const departure = route.split(',')[0];\n const destination = route.split(',').pop();\n\n if (departure && destination && date){\n const dateNumber = date.getDate();\n const month = date.getMonth() + 1;\n const year = date.getFullYear();\n return this.getCrossings(departure, destination, year, month, dateNumber)\n .then(html => {\n tableBody.innerHTML = html;\n loader.style = \"display:none;\"\n dateElement.classList.remove(\"disabled\");\n routeElement.classList.remove(\"disabled\");\n });\n }\n }\n \n }\n\n addRouteOption(route, cb, context = this) {\n let text = `${route.Departure.Name} to ${route.Destination.Name}`;\n let dataValue = `${route.Departure.Name} ${\n route.Destination.Name\n }`;\n\n let option = new Option(text, route.Value, route.Selected);\n\n if (route.Selected) {\n context.routeElement.value = route.Value;\n }\n\n option.dataset[\"textvalue\"] = dataValue;\n \n option.dataset[\"fromValue\"] = route.Departure.Name;\n option.dataset[\"toValue\"] = route.Destination.Name;\n\n context.routeElement.appendChild(option);\n cb();\n }\n\n mapRoutes(selectedRoute) {\n return this.getDepartureLocations()\n .then(locations => this.getRoutes(locations, selectedRoute))\n .then(routes => routes.forEachAsync(this.addRouteOption, this)\n .then(_ => (this.routeElement.value = routes.find(x => x.Selected).Value))\n );\n }\n \n get(uri) {\n return window.fetch(uri)\n .then(response => response.json());\n } \n \n getHtml(uri) {\n return window.fetch(uri)\n .then(response => response.text());\n }\n};\n\ndocument.addEventListener(\"DOMContentLoaded\",\n function () {\n const container = document.querySelector(\"div[data-timetable-container]\");\n \n if (container){\n new TimeTableWithSearch(container);\n }\n });"]}