{"version":3,"file":"static/js/9401.ed142b55.chunk.js","mappings":"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","sources":["shared/flight-information-hero/flight-information-hero.jsx"],"sourcesContent":["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":["FlightInformationHero","_Component","props","_this","_classCallCheck","_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","value","handleBlur","mouseOverResults","showResults","handleFocus","stringReplace","text","input","words","split","filter","Boolean","regex","RegExp","join","reactStringReplace","match","i","_jsx","children","modelJson","JSON","parse","document","body","dataset","_inherits","_createClass","key","_this2","heroType","this","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":""}