{"version":3,"file":"static/js/2947.0f8533f4.chunk.js","mappings":"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","sources":["shared/follow-flight/follow-flight-component.jsx","shared/follow-flight/follow-flight-module.js"],"sourcesContent":["import React, { Component } from \"react\"\nimport Svg from \"../_svgs/svg\"\nimport * as cookieNames from \"../../booking/constants/Cookies\"\nimport * as cookieHelper from \"../../helpers/cookie\"\nimport * as endpoints from \"../../booking/constants/Endpoints\"\nimport axios from \"axios\"\nimport * as date from \"../../booking/helpers/date\"\nimport Emitter from \"../../helpers/emitter\"\nimport * as emits from \"../../constants/emits\"\nimport { DateTime } from \"luxon\"\n\nexport default class FollowFlight extends Component {\n  constructor(props) {\n    super(props)\n\n    this.state = {\n      firstFlight: undefined,\n      allFlights: [],\n    }\n\n    this.addEventListeners()\n  }\n\n  addEventListeners() {\n    Emitter.on(\"*\", (event) => this.handleEvent(event))\n  }\n\n  handleEvent(event) {\n    const { type } = event\n    switch (type) {\n      case emits.REQUEST_FOLLOW_FLIGHT_COMPONENT:\n        this.setFollowedFlightsToState()\n        break\n      default:\n      // ignore\n    }\n  }\n\n  componentDidMount() {\n    this.setFollowedFlightsToState()\n    window.addEventListener(\"scroll\", this.handleScroll)\n  }\n\n  setFollowedFlightsToState = () => {\n    const hosts = document.body && document.body.dataset.hosts && JSON.parse(document.body.dataset.hosts)\n    const followedFlights = this.getAndUpdateFollowedFlights()\n    if (followedFlights) {\n      const { firstFlight, flights } = followedFlights\n      axios\n        .get(endpoints.FLIGHT_INFO(hosts, firstFlight.id))\n        .then((res) => res.data)\n        .then((data) => {\n          this.setState({ firstFlight: data })\n        })\n        .catch((err) => {\n          console.log(err)\n        })\n      this.setState({ allFlights: flights })\n    } else {\n      this.setState({ firstFlight: undefined, allFlights: [] })\n    }\n  }\n\n  getAndUpdateFollowedFlights() {\n    let cookie = cookieHelper.getCookie(cookieNames.CPH_FOLLOW_FLIGHT)\n    let flights = cookie\n    let firstFlight\n\n    const lang = document.body && document.body.dataset.language\n    const dtLocale = date.luxonLocale(lang)\n    const zone = \"Europe/Copenhagen\"\n    const currentTime = DateTime.local().setLocale(dtLocale).setZone(zone)\n\n    if (cookie) {\n      flights = flights.filter((f) => f.ept > currentTime.toJSDate().toISOString())\n      if (flights.length > 0) {\n        let sortedFlights = flights.sort((a, b) => (a.ept < b.ept ? -1 : a.ept > b.ept ? 1 : 0))\n        flights = sortedFlights\n        let lastFlight = flights[flights.length - 1]\n        firstFlight = flights[0]\n        let expiration = lastFlight.ept\n        cookieHelper.setCookieWithExpiration(cookieNames.CPH_FOLLOW_FLIGHT, flights, expiration) //cookie will be set server side the next time the page loads\n        return { firstFlight, flights }\n      } else {\n        cookieHelper.deleteCookie(cookieNames.CPH_FOLLOW_FLIGHT)\n      }\n    }\n    return undefined\n  }\n\n  handleScroll = () => {\n    let banner = document.querySelector(\".js--follow-flight-module\")\n    if (banner) {\n      let documentHeight = document.body.scrollHeight\n      let currentScroll = window.scrollY + window.innerHeight\n      if (currentScroll >= documentHeight) {\n        banner.style.display = \"none\"\n      } else {\n        banner.style.display = \"\"\n      }\n    }\n  }\n\n  render() {\n    const lang = document.body && document.body.dataset.language\n    const departureLink =\n      this.state.firstFlight?.direction === \"D\" && this.props.departuresPageLink\n        ? `${this.props.departuresPageLink}/${this.state.firstFlight?.flightDisplayName}?id=${this.state.firstFlight?.flightId}`\n        : undefined\n    const arrivalLink =\n      this.state.firstFlight?.direction === \"A\" && this.props.arrivalsPageLink\n        ? `${this.props.arrivalsPageLink}/${this.state.firstFlight?.flightDisplayName}?id=${this.state.firstFlight?.flightId}`\n        : undefined\n\n    const dtLocale = date.luxonLocale(lang)\n    const zone = \"Europe/Copenhagen\"\n    const displayTime = DateTime.fromISO(this.state.firstFlight.displayTime).setLocale(dtLocale).setZone(zone)\n\n    return this.state.firstFlight ? (\n      <div className=\"follow-flight\">\n        <a href={this.state.firstFlight?.direction === \"D\" ? departureLink : arrivalLink}>\n          <div className=\"follow-flight__flight\">\n            <Svg\n              iconName={this.state.firstFlight.direction === \"D\" ? this.props.departureFlightIcon : this.props.arrivalFlightIcon}\n              fillColor={this.props.flightIconColor}\n            />\n            <span className=\"flight-no\">{this.state.firstFlight.flightDisplayName}</span>\n            {this.state.firstFlight.direction === \"D\" ? (\n              <span className=\"flight-destination\">\n                <span className=\"to-from-label\"> {this.props.toLabel}</span> {this.state.firstFlight.destination}\n              </span>\n            ) : (\n              <span className=\"flight-destination\">\n                <span className=\"to-from-label\"> {this.props.fromLabel}</span> {this.state.firstFlight.destination}\n              </span>\n            )}\n          </div>\n          <div className={`follow-flight__departure`}>\n            {this.props.expectedLabel}\n            <span className=\"departure-time\"> {displayTime.toFormat(\"HH:mm\")}</span>\n          </div>\n          <div className=\"follow-flight__gate__info\">{this.state.firstFlight.publicRemark || this.props.noStatusLabel}</div>\n          {this.state.firstFlight.gate ? (\n            <div className=\"follow-flight__gate__no\">\n              <span className=\"info-box\">{this.state.firstFlight.gate}</span>\n            </div>\n          ) : (\n            \"\"\n          )}\n        </a>\n      </div>\n    ) : (\n      \"\"\n    )\n  }\n}\n","import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport FollowFlight from \"./follow-flight-component\"\n\nexport default class FollowFlightModule {\n  constructor(elem) {\n    const self = this\n    self.elem = elem\n    this.init()\n    return self\n  }\n\n  init() {\n    const self = this\n    ReactDOM.unmountComponentAtNode(self.elem)\n    ReactDOM.render(<FollowFlight {...self.elem.dataset} />, self.elem)\n  }\n}\n"],"names":["FollowFlight","_Component","props","_this","_classCallCheck","_callSuper","setFollowedFlightsToState","hosts","document","body","dataset","JSON","parse","followedFlights","getAndUpdateFollowedFlights","firstFlight","flights","axios","endpoints","id","then","res","data","setState","catch","err","console","log","allFlights","undefined","handleScroll","banner","querySelector","documentHeight","scrollHeight","currentScroll","window","scrollY","innerHeight","style","display","state","addEventListeners","_inherits","_createClass","key","value","_this2","Emitter","on","event","handleEvent","type","emits","this","addEventListener","cookie","cookieHelper","cookieNames","lang","language","dtLocale","date","currentTime","DateTime","local","setLocale","setZone","filter","f","ept","toJSDate","toISOString","length","sortedFlights","sort","a","b","lastFlight","expiration","_this$state$firstFlig","_this$state$firstFlig2","_this$state$firstFlig3","_this$state$firstFlig4","_this$state$firstFlig5","_this$state$firstFlig6","_this$state$firstFlig7","departureLink","direction","departuresPageLink","concat","flightDisplayName","flightId","arrivalLink","arrivalsPageLink","displayTime","fromISO","_jsx","className","children","_jsxs","href","Svg","iconName","departureFlightIcon","arrivalFlightIcon","fillColor","flightIconColor","toLabel","destination","fromLabel","expectedLabel","toFormat","publicRemark","noStatusLabel","gate","Component","FollowFlightModule","elem","init","self","ReactDOM","_objectSpread"],"sourceRoot":""}