{"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","closest","date","getLocation","moment","isSameOrAfter","undefined","dateText","format","add","classList","tableBody","loader","style","getCrossings","departure","split","destination","pop","dateNumber","getFullYear","html","remove","cb","getDate","text","getMonth","Name","dataValue","Selected","context","option","addRouteOption","length","_this4","getDepartureLocations","appendChild","x","uri","window","response","json","forEachAsync","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(\"/api/data/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(\"/api/data/variables/B2CDefaultRoute\");\n }\n\n getLocation(id) {\n return this.get(`/api/data/Location/${id}`);\n }\n\n getDepartureLocations() {\n return this.get(\"/api/data/DeparturePoints\")\n .then(data => data.filter(location => location.DeparturePoint));\n }\n \n getCrossings(departureId, destinationId, year, month, day){\n return this.getHtml(`/api/data/TimetableCrossings/${year}/${month}/${day}/${departureId}/${destinationId}`);\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 });"]}