{"version":3,"file":"static/js/7764.44a5cf62.chunk.js","mappings":"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","sources":["shared/flight-information-hero/flight-information-hero-module.js","shared/flight-information-hero/flight-information-hero.jsx"],"sourcesContent":["import React from \"react\"\nimport ReactDOM from \"react-dom\"\nimport FlightInformationHero from \"./flight-information-hero\"\n\nexport default class FlightInformationHeroModule {\n  constructor(elem) {\n    const self = this\n    self.elem = elem\n    self.init()\n    return self\n  }\n\n  init() {\n    const self = this\n    ReactDOM.unmountComponentAtNode(self.elem)\n    ReactDOM.render(<FlightInformationHero {...self.elem.dataset} />, self.elem)\n  }\n}\n","import React, { Component } from \"react\"\nimport * as endpoints from \"../../api/endpoints\"\nimport ReactHtmlParser from \"react-html-parser\"\nimport { isMobile } from \"react-device-detect\"\nimport reactStringReplace from \"react-string-replace\"\nimport { DateTime } from \"luxon\"\n\nexport default class FlightInformationHero extends Component {\n  constructor(props) {\n    super(props)\n\n    const modelJson = props.modelJson && JSON.parse(props.modelJson)\n\n    this.state = {\n      modelJson: modelJson,\n      flights: [],\n      direction: \"D\",\n      language: (document.body && document.body.dataset.language) || \"da\",\n      q: \"\",\n      showResults: false,\n      mouseOverResults: false,\n    }\n  }\n\n  search = async () => {\n    let flights = []\n    if (this.state.q.length > 0) {\n      const dt = DateTime.utc()\n      const start = dt\n      const end = dt.endOf(\"day\")\n      const data = { direction: this.state.direction, query: this.state.q, startDateTime: start, endDateTime: end, language: this.state.language }\n      const response = await endpoints.getFlightInfoTable(data)\n      if (response && response.data) {\n        flights = response.data\n      }\n    }\n    this.setState({ flights: flights })\n  }\n\n  handleInput = (event, search = true) => {\n    this.setState(\n      {\n        [event.target.name]: event.target.value,\n      },\n      () => {\n        if (search) this.search()\n      },\n    )\n  }\n\n  handleBlur = () => {\n    // makes it possible to click the results without them disappearing\n    if (!this.state.mouseOverResults) {\n      this.setState({ showResults: false })\n    }\n  }\n\n  handleFocus = () => {\n    this.setState({ showResults: true })\n  }\n\n  stringReplace = (text, input) => {\n    const words = input.split(\" \").filter(Boolean)\n    const regex = new RegExp(\"(\" + words.join(\"*|\") + \")\", \"gi\")\n    return reactStringReplace(text, regex, (match, i) => <strong key={match + i}>{match}</strong>)\n  }\n\n  render() {\n    const heroType = this.props.backgroundVideo ? \"hero--video\" : \"hero--image\"\n    const heroStyle = this.props.backgroundImage ? { backgroundImage: `url(${this.props.backgroundImage})` } : {}\n    const inputStyle = this.state.flights.length > 0 ? { position: \"relative\", zIndex: \"9401\" } : {}\n    const resultsStyle = isMobile ? { left: \"1px\", right: \"1px\" } : { width: \"550px\", left: \"1px\", top: \"80px\" }\n\n    return (\n      <section className=\"deck deck--top deck--front\">\n        <div className={`hero hero--search ${heroType}`}>\n          <span className=\"hero__image\" style={heroStyle}>\n            <img src={this.props.backgroundImage ? this.props.backgroundImage : \"\"} loading=\"eager\" fetchPriority=\"high\" />\n          </span>\n          {this.props.backgroundVideo ? (\n            <span className=\"hero__video\">\n              <video tabIndex={-1} playsInline muted autoPlay loop preload=\"auto\" loading=\"eager\" fetchPriority=\"high\">\n                <source src={this.props.backgroundVideo} type=\"video/mp4\" />\n              </video>\n            </span>\n          ) : (\n            \"\"\n          )}\n          <div className=\"hero__content\">\n            <h6>{this.state.modelJson.label}</h6>\n            {ReactHtmlParser(this.state.modelJson.heading)}\n            <div className=\"form hero__search\">\n              <div className=\"form__section form__section--fat\">\n                <div className=\"hero__search__radios form__section__inner\">\n                  <div\n                    className={`form__field form__field--radio form__field--radio--small is-bound ${\n                      this.state.direction === \"D\" ? \"is-checked\" : \"\"\n                    }`}\n                  >\n                    <label className=\"form__label\">\n                      <input\n                        className=\"form__item \"\n                        name=\"direction\"\n                        type=\"radio\"\n                        value=\"D\"\n                        checked={this.state.direction === \"D\" ? \"checked\" : \"\"}\n                        onChange={(e) => this.handleInput(e)}\n                      />\n                      <span className=\"form__label__text\">\n                        <p>{this.state.modelJson.departureLabel}</p>\n                      </span>\n                    </label>\n                  </div>\n                  <div\n                    className={`form__field form__field--radio form__field--radio--small is-bound ${\n                      this.state.direction === \"A\" ? \"is-checked\" : \"\"\n                    }`}\n                  >\n                    <label className=\"form__label\">\n                      <input\n                        className=\"form__item \"\n                        name=\"direction\"\n                        type=\"radio\"\n                        value=\"A\"\n                        checked={this.state.direction === \"A\" ? \"checked\" : \"\"}\n                        onChange={(e) => this.handleInput(e)}\n                      />\n                      <span className=\"form__label__text\">\n                        <p>{this.state.modelJson.arrivalLabel}</p>\n                      </span>\n                    </label>\n                  </div>\n                </div>\n                <div className=\"hero__search__text form__section__inner\">\n                  <div\n                    className={`form__field form__field--text form__field--text--no-label is-bound ${\n                      this.state.q.length > 0 && this.state.showResults ? \"is-filled has-focus\" : \"\"\n                    }`}\n                  >\n                    <span className=\"form__valid\"></span>\n                    <input\n                      autoComplete=\"off\"\n                      style={inputStyle}\n                      className={`form__item ${this.state.flights.length > 0 && this.state.showResults ? \"has-suggestions\" : \"\"}`}\n                      name=\"q\"\n                      type=\"text\"\n                      value={this.state.q}\n                      onChange={(e) => this.handleInput(e)}\n                      onBlur={() => this.handleBlur()}\n                      onFocus={() => this.handleFocus()}\n                      placeholder={this.state.modelJson.searchBoxPlaceholder}\n                    />\n                    {this.state.flights.length && this.state.q.length > 0 && this.state.showResults ? (\n                      <div\n                        className=\"search-ahead search-ahead--left is-visible is-active\"\n                        style={resultsStyle}\n                        onMouseOver={() => this.setState({ mouseOverResults: true })}\n                        onMouseOut={() => this.setState({ mouseOverResults: false })}\n                      >\n                        <div className=\"search-ahead__inner\">\n                          {this.state.flights.map((flight, index) => {\n                            const destination = this.stringReplace(flight.DestinationName, this.state.q)\n                            const airline = this.stringReplace(flight.Airline, this.state.q)\n                            const iataDestination = this.stringReplace(flight.IataDestination, this.state.q)\n                            if (index <= this.state.modelJson.numberOfFlights)\n                              return (\n                                <a\n                                  key={index}\n                                  href={`${this.state.direction === \"A\" ? this.state.modelJson.arrivalsPage : this.state.modelJson.departuresPage}/${\n                                    flight.Iata\n                                  }?id=${flight.FlightId}`}\n                                >\n                                  <div className=\"search-ahead__inner__item\">\n                                    <h5>\n                                      {destination}\n                                      <br />\n                                      <small>{airline}</small>\n                                    </h5>\n                                    <h6>{iataDestination}</h6>\n                                  </div>\n                                </a>\n                              )\n                            else {\n                              return\n                            }\n                          })}\n                        </div>\n                      </div>\n                    ) : (\n                      \"\"\n                    )}\n                  </div>\n                  <a\n                    className=\"button button--general-inverted button--large\"\n                    href={`${this.state.direction === \"A\" ? this.state.modelJson.arrivalsPage : this.state.modelJson.departuresPage}?q=${\n                      this.state.q\n                    }`}\n                  >\n                    <span className=\"text\">{this.state.modelJson.searchButtonLabel}</span>\n                  </a>\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </section>\n    )\n  }\n}\n"],"names":["FlightInformationHeroModule","_createClass","elem","_classCallCheck","self","this","init","key","value","ReactDOM","_jsx","FlightInformationHero","_objectSpread","dataset","_Component","props","_this","_callSuper","search","_asyncToGenerator","_regeneratorRuntime","mark","_callee","flights","dt","start","end","data","response","wrap","_context","prev","next","state","q","length","DateTime","utc","endOf","direction","query","startDateTime","endDateTime","language","endpoints","sent","setState","stop","handleInput","event","arguments","undefined","_defineProperty","target","name","handleBlur","mouseOverResults","showResults","handleFocus","stringReplace","text","input","words","split","filter","Boolean","regex","RegExp","join","reactStringReplace","match","i","children","modelJson","JSON","parse","document","body","_inherits","_this2","heroType","backgroundVideo","heroStyle","backgroundImage","concat","inputStyle","position","zIndex","resultsStyle","isMobile","left","right","width","top","className","_jsxs","style","src","loading","fetchPriority","tabIndex","playsInline","muted","autoPlay","loop","preload","type","label","ReactHtmlParser","heading","checked","onChange","e","departureLabel","arrivalLabel","autoComplete","onBlur","onFocus","placeholder","searchBoxPlaceholder","onMouseOver","onMouseOut","map","flight","index","destination","DestinationName","airline","Airline","iataDestination","IataDestination","numberOfFlights","href","arrivalsPage","departuresPage","Iata","FlightId","searchButtonLabel","Component"],"sourceRoot":""}