Repository: kiwicom/mobile
Pull request #969 (2018-08-09 07:23:14)

MMB: Add Prior to booking component for explore on main menu


Patch:
diff --git a/app/MMB/src/__generated__/MainMenuContainerQuery.graphql.js b/app/MMB/src/__generated__/MainMenuContainerQuery.graphql.js
index 71aba85b..c0f78c41 100644
--- a/app/MMB/src/__generated__/MainMenuContainerQuery.graphql.js
+++ b/app/MMB/src/__generated__/MainMenuContainerQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash b2bdfa3307ee6071409e441d489a8cef
+ * @relayHash 5999c7a6f9c13c1f6a7a7c7cbb16abab
  */
 
 /* eslint-disable */
@@ -349,6 +349,7 @@ fragment ExploreVariant_trip on Trip {
     ...BookingConfirmed_arrival
   }
   legs {
+    ...PriorToDeparture
     departure {
       ...BookingConfirmed_departure
       time
@@ -366,6 +367,24 @@ fragment BookingConfirmed_arrival on RouteStop {
   }
 }
 
+fragment PriorToDeparture on Leg {
+  recheckRequired
+  departure {
+    localTime
+    gate
+    airport {
+      name
+      id
+    }
+  }
+  arrival {
+    airport {
+      name
+      id
+    }
+  }
+}
+
 fragment BookingConfirmed_departure on RouteStop {
   time
 }
@@ -515,26 +534,13 @@ v13 = {
   "concreteType": "Location",
   "plural": false,
   "selections": [
+    v3,
+    v4,
     v12,
-    v7,
-    v4
+    v7
   ]
 },
 v14 = {
-  "kind": "LinkedField",
-  "alias": null,
-  "name": "departure",
-  "storageKey": null,
-  "args": null,
-  "concreteType": "RouteStop",
-  "plural": false,
-  "selections": [
-    v6,
-    v10,
-    v13
-  ]
-},
-v15 = {
   "kind": "LinkedField",
   "alias": null,
   "name": "legs",
@@ -543,21 +549,48 @@ v15 = {
   "concreteType": "Leg",
   "plural": true,
   "selections": [
-    v14,
-    v4,
+    {
+      "kind": "ScalarField",
+      "alias": null,
+      "name": "recheckRequired",
+      "args": null,
+      "storageKey": null
+    },
     {
       "kind": "LinkedField",
       "alias": null,
-      "name": "arrival",
+      "name": "departure",
       "storageKey": null,
       "args": null,
       "concreteType": "RouteStop",
       "plural": false,
       "selections": [
         v10,
-        v13
+        {
+          "kind": "ScalarField",
+          "alias": null,
+          "name": "gate",
+          "args": null,
+          "storageKey": null
+        },
+        v13,
+        v6
+      ]
+    },
+    {
+      "kind": "LinkedField",
+      "alias": null,
+      "name": "arrival",
+      "storageKey": null,
+      "args": null,
+      "concreteType": "RouteStop",
+      "plural": false,
+      "selections": [
+        v13,
+        v10
       ]
     },
+    v4,
     {
       "kind": "ScalarField",
       "alias": null,
@@ -586,7 +619,7 @@ v15 = {
     }
   ]
 },
-v16 = {
+v15 = {
   "kind": "ScalarField",
   "alias": null,
   "name": "duration",
@@ -598,7 +631,7 @@ return {
   "operationKind": "query",
   "name": "MainMenuContainerQuery",
   "id": null,
-  "text": "query MainMenuContainerQuery(\n  $bookingId: Int!\n  $authToken: String!\n) {\n  singleBooking(id: $bookingId, authToken: $authToken) {\n    __typename\n    ...MainMenu\n    id\n  }\n}\n\nfragment MainMenu on BookingInterface {\n  databaseId\n  authToken\n  isPastBooking\n  ...ExploreCity\n  ...Header\n  ...PassengerMenuGroup\n  ...MissingInformation\n}\n\nfragment ExploreCity on BookingInterface {\n  ...CardContent\n}\n\nfragment Header on BookingInterface {\n  isPastBooking\n  ...StatusBar\n  ...TripInfo\n  ...TripOverview\n}\n\nfragment PassengerMenuGroup on BookingInterface {\n  ...PassengerMenuDetail\n}\n\nfragment MissingInformation on BookingInterface {\n  passengers {\n    travelDocument {\n      idNumber\n    }\n  }\n}\n\nfragment PassengerMenuDetail on BookingInterface {\n  ...Visa\n  passengers {\n    databaseId\n    ...Passenger\n  }\n}\n\nfragment Visa on BookingInterface {\n  passengers {\n    visaInformation {\n      requiredIn {\n        name\n        id\n      }\n      warningIn {\n        name\n        id\n      }\n    }\n  }\n}\n\nfragment Passenger on Passenger {\n  fullName\n  title\n  birthday\n}\n\nfragment StatusBar on BookingInterface {\n  ...StatusBarIcon\n  databaseId\n}\n\nfragment TripInfo on BookingInterface {\n  __typename\n  ... on BookingOneWay {\n    ...TripInfoOneWay\n  }\n  ... on BookingReturn {\n    ...TripInfoReturn\n  }\n  ... on BookingMulticity {\n    ...TripInfoMulticity\n  }\n}\n\nfragment TripOverview on BookingInterface {\n  __typename\n  ... on BookingOneWay {\n    ...OneWayTimeline\n  }\n  ... on BookingReturn {\n    ...ReturnTimeline\n  }\n  ... on BookingMulticity {\n    ...MulticityTimeline\n  }\n}\n\nfragment OneWayTimeline on BookingOneWay {\n  trip {\n    ...Timeline\n  }\n}\n\nfragment ReturnTimeline on BookingReturn {\n  outbound {\n    ...Timeline\n    departure {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n    arrival {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n  }\n  inbound {\n    ...Timeline\n    departure {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n    arrival {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n  }\n}\n\nfragment MulticityTimeline on BookingMulticity {\n  trips {\n    ...Timeline\n  }\n}\n\nfragment Timeline on Trip {\n  legs {\n    departure {\n      ...TimelineDeparture_routeStop\n    }\n    arrival {\n      ...TimelineArrival\n    }\n    ...TimelineDeparture_legInfo\n    id\n  }\n}\n\nfragment TimelineDeparture_routeStop on RouteStop {\n  ...TimelineTitle\n}\n\nfragment TimelineArrival on RouteStop {\n  ...TimelineTitle\n}\n\nfragment TimelineDeparture_legInfo on Leg {\n  flightNumber\n  airline {\n    name\n    logoUrl\n  }\n}\n\nfragment TimelineTitle on RouteStop {\n  localTime\n  airport {\n    locationId\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment TripInfoOneWay on BookingOneWay {\n  trip {\n    ...TripCities\n    ...TripTimes\n  }\n}\n\nfragment TripInfoReturn on BookingReturn {\n  outbound {\n    ...TripCities\n    ...TripTimes\n  }\n  inbound {\n    ...TripTimes\n  }\n}\n\nfragment TripInfoMulticity on BookingMulticity {\n  trips {\n    ...TripCities\n    ...TripTimes\n  }\n}\n\nfragment TripCities on Trip {\n  departure {\n    ...Location\n  }\n  arrival {\n    ...Location\n  }\n}\n\nfragment TripTimes on Trip {\n  ...Duration\n  departure {\n    ...DateTime\n  }\n  arrival {\n    ...DateTime\n  }\n}\n\nfragment Duration on Trip {\n  duration\n}\n\nfragment DateTime on RouteStop {\n  localTime\n}\n\nfragment Location on RouteStop {\n  airport {\n    city {\n      name\n    }\n    ...CountryFlag\n    id\n  }\n}\n\nfragment CountryFlag on Location {\n  countryFlagURL\n}\n\nfragment StatusBarIcon on BookingInterface {\n  status\n  isPastBooking\n}\n\nfragment CardContent on BookingInterface {\n  __typename\n  ...ExploreOneWay\n  ...ExploreReturn\n  ...ExploreMulticity\n}\n\nfragment ExploreOneWay on BookingInterface {\n  ... on BookingOneWay {\n    trip {\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreReturn on BookingInterface {\n  ... on BookingReturn {\n    outbound {\n      ...ExploreVariant_trip\n      arrival {\n        time\n      }\n    }\n    inbound {\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreMulticity on BookingInterface {\n  ... on BookingMulticity {\n    trips {\n      arrival {\n        time\n      }\n      departure {\n        time\n      }\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreVariant_trip on Trip {\n  departure {\n    time\n  }\n  arrival {\n    ...BookingConfirmed_arrival\n  }\n  legs {\n    departure {\n      ...BookingConfirmed_departure\n      time\n    }\n    id\n  }\n}\n\nfragment BookingConfirmed_arrival on RouteStop {\n  airport {\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment BookingConfirmed_departure on RouteStop {\n  time\n}\n",
+  "text": "query MainMenuContainerQuery(\n  $bookingId: Int!\n  $authToken: String!\n) {\n  singleBooking(id: $bookingId, authToken: $authToken) {\n    __typename\n    ...MainMenu\n    id\n  }\n}\n\nfragment MainMenu on BookingInterface {\n  databaseId\n  authToken\n  isPastBooking\n  ...ExploreCity\n  ...Header\n  ...PassengerMenuGroup\n  ...MissingInformation\n}\n\nfragment ExploreCity on BookingInterface {\n  ...CardContent\n}\n\nfragment Header on BookingInterface {\n  isPastBooking\n  ...StatusBar\n  ...TripInfo\n  ...TripOverview\n}\n\nfragment PassengerMenuGroup on BookingInterface {\n  ...PassengerMenuDetail\n}\n\nfragment MissingInformation on BookingInterface {\n  passengers {\n    travelDocument {\n      idNumber\n    }\n  }\n}\n\nfragment PassengerMenuDetail on BookingInterface {\n  ...Visa\n  passengers {\n    databaseId\n    ...Passenger\n  }\n}\n\nfragment Visa on BookingInterface {\n  passengers {\n    visaInformation {\n      requiredIn {\n        name\n        id\n      }\n      warningIn {\n        name\n        id\n      }\n    }\n  }\n}\n\nfragment Passenger on Passenger {\n  fullName\n  title\n  birthday\n}\n\nfragment StatusBar on BookingInterface {\n  ...StatusBarIcon\n  databaseId\n}\n\nfragment TripInfo on BookingInterface {\n  __typename\n  ... on BookingOneWay {\n    ...TripInfoOneWay\n  }\n  ... on BookingReturn {\n    ...TripInfoReturn\n  }\n  ... on BookingMulticity {\n    ...TripInfoMulticity\n  }\n}\n\nfragment TripOverview on BookingInterface {\n  __typename\n  ... on BookingOneWay {\n    ...OneWayTimeline\n  }\n  ... on BookingReturn {\n    ...ReturnTimeline\n  }\n  ... on BookingMulticity {\n    ...MulticityTimeline\n  }\n}\n\nfragment OneWayTimeline on BookingOneWay {\n  trip {\n    ...Timeline\n  }\n}\n\nfragment ReturnTimeline on BookingReturn {\n  outbound {\n    ...Timeline\n    departure {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n    arrival {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n  }\n  inbound {\n    ...Timeline\n    departure {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n    arrival {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n  }\n}\n\nfragment MulticityTimeline on BookingMulticity {\n  trips {\n    ...Timeline\n  }\n}\n\nfragment Timeline on Trip {\n  legs {\n    departure {\n      ...TimelineDeparture_routeStop\n    }\n    arrival {\n      ...TimelineArrival\n    }\n    ...TimelineDeparture_legInfo\n    id\n  }\n}\n\nfragment TimelineDeparture_routeStop on RouteStop {\n  ...TimelineTitle\n}\n\nfragment TimelineArrival on RouteStop {\n  ...TimelineTitle\n}\n\nfragment TimelineDeparture_legInfo on Leg {\n  flightNumber\n  airline {\n    name\n    logoUrl\n  }\n}\n\nfragment TimelineTitle on RouteStop {\n  localTime\n  airport {\n    locationId\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment TripInfoOneWay on BookingOneWay {\n  trip {\n    ...TripCities\n    ...TripTimes\n  }\n}\n\nfragment TripInfoReturn on BookingReturn {\n  outbound {\n    ...TripCities\n    ...TripTimes\n  }\n  inbound {\n    ...TripTimes\n  }\n}\n\nfragment TripInfoMulticity on BookingMulticity {\n  trips {\n    ...TripCities\n    ...TripTimes\n  }\n}\n\nfragment TripCities on Trip {\n  departure {\n    ...Location\n  }\n  arrival {\n    ...Location\n  }\n}\n\nfragment TripTimes on Trip {\n  ...Duration\n  departure {\n    ...DateTime\n  }\n  arrival {\n    ...DateTime\n  }\n}\n\nfragment Duration on Trip {\n  duration\n}\n\nfragment DateTime on RouteStop {\n  localTime\n}\n\nfragment Location on RouteStop {\n  airport {\n    city {\n      name\n    }\n    ...CountryFlag\n    id\n  }\n}\n\nfragment CountryFlag on Location {\n  countryFlagURL\n}\n\nfragment StatusBarIcon on BookingInterface {\n  status\n  isPastBooking\n}\n\nfragment CardContent on BookingInterface {\n  __typename\n  ...ExploreOneWay\n  ...ExploreReturn\n  ...ExploreMulticity\n}\n\nfragment ExploreOneWay on BookingInterface {\n  ... on BookingOneWay {\n    trip {\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreReturn on BookingInterface {\n  ... on BookingReturn {\n    outbound {\n      ...ExploreVariant_trip\n      arrival {\n        time\n      }\n    }\n    inbound {\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreMulticity on BookingInterface {\n  ... on BookingMulticity {\n    trips {\n      arrival {\n        time\n      }\n      departure {\n        time\n      }\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreVariant_trip on Trip {\n  departure {\n    time\n  }\n  arrival {\n    ...BookingConfirmed_arrival\n  }\n  legs {\n    ...PriorToDeparture\n    departure {\n      ...BookingConfirmed_departure\n      time\n    }\n    id\n  }\n}\n\nfragment BookingConfirmed_arrival on RouteStop {\n  airport {\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment PriorToDeparture on Leg {\n  recheckRequired\n  departure {\n    localTime\n    gate\n    airport {\n      name\n      id\n    }\n  }\n  arrival {\n    airport {\n      name\n      id\n    }\n  }\n}\n\nfragment BookingConfirmed_departure on RouteStop {\n  time\n}\n",
   "metadata": {},
   "fragment": {
     "kind": "Fragment",
@@ -779,8 +812,8 @@ return {
                     ]
                   },
                   v11,
-                  v15,
-                  v16
+                  v14,
+                  v15
                 ]
               }
             ]
@@ -854,8 +887,8 @@ return {
                       v10
                     ]
                   },
-                  v15,
-                  v16
+                  v14,
+                  v15
                 ]
               },
               {
@@ -867,7 +900,33 @@ return {
                 "concreteType": "Trip",
                 "plural": false,
                 "selections": [
-                  v14,
+                  {
+                    "kind": "LinkedField",
+                    "alias": null,
+                    "name": "departure",
+                    "storageKey": null,
+                    "args": null,
+                    "concreteType": "RouteStop",
+                    "plural": false,
+                    "selections": [
+                      v6,
+                      v10,
+                      {
+                        "kind": "LinkedField",
+                        "alias": null,
+                        "name": "airport",
+                        "storageKey": null,
+                        "args": null,
+                        "concreteType": "Location",
+                        "plural": false,
+                        "selections": [
+                          v12,
+                          v7,
+                          v4
+                        ]
+                      }
+                    ]
+                  },
                   {
                     "kind": "LinkedField",
                     "alias": null,
@@ -894,8 +953,8 @@ return {
                       v10
                     ]
                   },
-                  v15,
-                  v16
+                  v14,
+                  v15
                 ]
               }
             ]
@@ -927,8 +986,8 @@ return {
                       v10
                     ]
                   },
-                  v15,
-                  v16
+                  v14,
+                  v15
                 ]
               }
             ]
diff --git a/app/MMB/src/__generated__/MainMenuRefetchQuery.graphql.js b/app/MMB/src/__generated__/MainMenuRefetchQuery.graphql.js
index 6d00cae8..5d702ab2 100644
--- a/app/MMB/src/__generated__/MainMenuRefetchQuery.graphql.js
+++ b/app/MMB/src/__generated__/MainMenuRefetchQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 8b444d55d0b4364584535b0cb06ca6ba
+ * @relayHash 909ba0bd1138183b209aa5c54f6cd469
  */
 
 /* eslint-disable */
@@ -349,6 +349,7 @@ fragment ExploreVariant_trip on Trip {
     ...BookingConfirmed_arrival
   }
   legs {
+    ...PriorToDeparture
     departure {
       ...BookingConfirmed_departure
       time
@@ -366,6 +367,24 @@ fragment BookingConfirmed_arrival on RouteStop {
   }
 }
 
+fragment PriorToDeparture on Leg {
+  recheckRequired
+  departure {
+    localTime
+    gate
+    airport {
+      name
+      id
+    }
+  }
+  arrival {
+    airport {
+      name
+      id
+    }
+  }
+}
+
 fragment BookingConfirmed_departure on RouteStop {
   time
 }
@@ -515,26 +534,13 @@ v13 = {
   "concreteType": "Location",
   "plural": false,
   "selections": [
+    v3,
+    v4,
     v12,
-    v7,
-    v4
+    v7
   ]
 },
 v14 = {
-  "kind": "LinkedField",
-  "alias": null,
-  "name": "departure",
-  "storageKey": null,
-  "args": null,
-  "concreteType": "RouteStop",
-  "plural": false,
-  "selections": [
-    v6,
-    v10,
-    v13
-  ]
-},
-v15 = {
   "kind": "LinkedField",
   "alias": null,
   "name": "legs",
@@ -543,21 +549,48 @@ v15 = {
   "concreteType": "Leg",
   "plural": true,
   "selections": [
-    v14,
-    v4,
+    {
+      "kind": "ScalarField",
+      "alias": null,
+      "name": "recheckRequired",
+      "args": null,
+      "storageKey": null
+    },
     {
       "kind": "LinkedField",
       "alias": null,
-      "name": "arrival",
+      "name": "departure",
       "storageKey": null,
       "args": null,
       "concreteType": "RouteStop",
       "plural": false,
       "selections": [
         v10,
-        v13
+        {
+          "kind": "ScalarField",
+          "alias": null,
+          "name": "gate",
+          "args": null,
+          "storageKey": null
+        },
+        v13,
+        v6
+      ]
+    },
+    {
+      "kind": "LinkedField",
+      "alias": null,
+      "name": "arrival",
+      "storageKey": null,
+      "args": null,
+      "concreteType": "RouteStop",
+      "plural": false,
+      "selections": [
+        v13,
+        v10
       ]
     },
+    v4,
     {
       "kind": "ScalarField",
       "alias": null,
@@ -586,7 +619,7 @@ v15 = {
     }
   ]
 },
-v16 = {
+v15 = {
   "kind": "ScalarField",
   "alias": null,
   "name": "duration",
@@ -598,7 +631,7 @@ return {
   "operationKind": "query",
   "name": "MainMenuRefetchQuery",
   "id": null,
-  "text": "query MainMenuRefetchQuery(\n  $id: Int!\n  $authToken: String!\n) {\n  singleBooking(id: $id, authToken: $authToken) {\n    __typename\n    ...MainMenu\n    id\n  }\n}\n\nfragment MainMenu on BookingInterface {\n  databaseId\n  authToken\n  isPastBooking\n  ...ExploreCity\n  ...Header\n  ...PassengerMenuGroup\n  ...MissingInformation\n}\n\nfragment ExploreCity on BookingInterface {\n  ...CardContent\n}\n\nfragment Header on BookingInterface {\n  isPastBooking\n  ...StatusBar\n  ...TripInfo\n  ...TripOverview\n}\n\nfragment PassengerMenuGroup on BookingInterface {\n  ...PassengerMenuDetail\n}\n\nfragment MissingInformation on BookingInterface {\n  passengers {\n    travelDocument {\n      idNumber\n    }\n  }\n}\n\nfragment PassengerMenuDetail on BookingInterface {\n  ...Visa\n  passengers {\n    databaseId\n    ...Passenger\n  }\n}\n\nfragment Visa on BookingInterface {\n  passengers {\n    visaInformation {\n      requiredIn {\n        name\n        id\n      }\n      warningIn {\n        name\n        id\n      }\n    }\n  }\n}\n\nfragment Passenger on Passenger {\n  fullName\n  title\n  birthday\n}\n\nfragment StatusBar on BookingInterface {\n  ...StatusBarIcon\n  databaseId\n}\n\nfragment TripInfo on BookingInterface {\n  __typename\n  ... on BookingOneWay {\n    ...TripInfoOneWay\n  }\n  ... on BookingReturn {\n    ...TripInfoReturn\n  }\n  ... on BookingMulticity {\n    ...TripInfoMulticity\n  }\n}\n\nfragment TripOverview on BookingInterface {\n  __typename\n  ... on BookingOneWay {\n    ...OneWayTimeline\n  }\n  ... on BookingReturn {\n    ...ReturnTimeline\n  }\n  ... on BookingMulticity {\n    ...MulticityTimeline\n  }\n}\n\nfragment OneWayTimeline on BookingOneWay {\n  trip {\n    ...Timeline\n  }\n}\n\nfragment ReturnTimeline on BookingReturn {\n  outbound {\n    ...Timeline\n    departure {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n    arrival {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n  }\n  inbound {\n    ...Timeline\n    departure {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n    arrival {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n  }\n}\n\nfragment MulticityTimeline on BookingMulticity {\n  trips {\n    ...Timeline\n  }\n}\n\nfragment Timeline on Trip {\n  legs {\n    departure {\n      ...TimelineDeparture_routeStop\n    }\n    arrival {\n      ...TimelineArrival\n    }\n    ...TimelineDeparture_legInfo\n    id\n  }\n}\n\nfragment TimelineDeparture_routeStop on RouteStop {\n  ...TimelineTitle\n}\n\nfragment TimelineArrival on RouteStop {\n  ...TimelineTitle\n}\n\nfragment TimelineDeparture_legInfo on Leg {\n  flightNumber\n  airline {\n    name\n    logoUrl\n  }\n}\n\nfragment TimelineTitle on RouteStop {\n  localTime\n  airport {\n    locationId\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment TripInfoOneWay on BookingOneWay {\n  trip {\n    ...TripCities\n    ...TripTimes\n  }\n}\n\nfragment TripInfoReturn on BookingReturn {\n  outbound {\n    ...TripCities\n    ...TripTimes\n  }\n  inbound {\n    ...TripTimes\n  }\n}\n\nfragment TripInfoMulticity on BookingMulticity {\n  trips {\n    ...TripCities\n    ...TripTimes\n  }\n}\n\nfragment TripCities on Trip {\n  departure {\n    ...Location\n  }\n  arrival {\n    ...Location\n  }\n}\n\nfragment TripTimes on Trip {\n  ...Duration\n  departure {\n    ...DateTime\n  }\n  arrival {\n    ...DateTime\n  }\n}\n\nfragment Duration on Trip {\n  duration\n}\n\nfragment DateTime on RouteStop {\n  localTime\n}\n\nfragment Location on RouteStop {\n  airport {\n    city {\n      name\n    }\n    ...CountryFlag\n    id\n  }\n}\n\nfragment CountryFlag on Location {\n  countryFlagURL\n}\n\nfragment StatusBarIcon on BookingInterface {\n  status\n  isPastBooking\n}\n\nfragment CardContent on BookingInterface {\n  __typename\n  ...ExploreOneWay\n  ...ExploreReturn\n  ...ExploreMulticity\n}\n\nfragment ExploreOneWay on BookingInterface {\n  ... on BookingOneWay {\n    trip {\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreReturn on BookingInterface {\n  ... on BookingReturn {\n    outbound {\n      ...ExploreVariant_trip\n      arrival {\n        time\n      }\n    }\n    inbound {\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreMulticity on BookingInterface {\n  ... on BookingMulticity {\n    trips {\n      arrival {\n        time\n      }\n      departure {\n        time\n      }\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreVariant_trip on Trip {\n  departure {\n    time\n  }\n  arrival {\n    ...BookingConfirmed_arrival\n  }\n  legs {\n    departure {\n      ...BookingConfirmed_departure\n      time\n    }\n    id\n  }\n}\n\nfragment BookingConfirmed_arrival on RouteStop {\n  airport {\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment BookingConfirmed_departure on RouteStop {\n  time\n}\n",
+  "text": "query MainMenuRefetchQuery(\n  $id: Int!\n  $authToken: String!\n) {\n  singleBooking(id: $id, authToken: $authToken) {\n    __typename\n    ...MainMenu\n    id\n  }\n}\n\nfragment MainMenu on BookingInterface {\n  databaseId\n  authToken\n  isPastBooking\n  ...ExploreCity\n  ...Header\n  ...PassengerMenuGroup\n  ...MissingInformation\n}\n\nfragment ExploreCity on BookingInterface {\n  ...CardContent\n}\n\nfragment Header on BookingInterface {\n  isPastBooking\n  ...StatusBar\n  ...TripInfo\n  ...TripOverview\n}\n\nfragment PassengerMenuGroup on BookingInterface {\n  ...PassengerMenuDetail\n}\n\nfragment MissingInformation on BookingInterface {\n  passengers {\n    travelDocument {\n      idNumber\n    }\n  }\n}\n\nfragment PassengerMenuDetail on BookingInterface {\n  ...Visa\n  passengers {\n    databaseId\n    ...Passenger\n  }\n}\n\nfragment Visa on BookingInterface {\n  passengers {\n    visaInformation {\n      requiredIn {\n        name\n        id\n      }\n      warningIn {\n        name\n        id\n      }\n    }\n  }\n}\n\nfragment Passenger on Passenger {\n  fullName\n  title\n  birthday\n}\n\nfragment StatusBar on BookingInterface {\n  ...StatusBarIcon\n  databaseId\n}\n\nfragment TripInfo on BookingInterface {\n  __typename\n  ... on BookingOneWay {\n    ...TripInfoOneWay\n  }\n  ... on BookingReturn {\n    ...TripInfoReturn\n  }\n  ... on BookingMulticity {\n    ...TripInfoMulticity\n  }\n}\n\nfragment TripOverview on BookingInterface {\n  __typename\n  ... on BookingOneWay {\n    ...OneWayTimeline\n  }\n  ... on BookingReturn {\n    ...ReturnTimeline\n  }\n  ... on BookingMulticity {\n    ...MulticityTimeline\n  }\n}\n\nfragment OneWayTimeline on BookingOneWay {\n  trip {\n    ...Timeline\n  }\n}\n\nfragment ReturnTimeline on BookingReturn {\n  outbound {\n    ...Timeline\n    departure {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n    arrival {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n  }\n  inbound {\n    ...Timeline\n    departure {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n    arrival {\n      localTime\n      airport {\n        locationId\n        city {\n          name\n        }\n        id\n      }\n    }\n  }\n}\n\nfragment MulticityTimeline on BookingMulticity {\n  trips {\n    ...Timeline\n  }\n}\n\nfragment Timeline on Trip {\n  legs {\n    departure {\n      ...TimelineDeparture_routeStop\n    }\n    arrival {\n      ...TimelineArrival\n    }\n    ...TimelineDeparture_legInfo\n    id\n  }\n}\n\nfragment TimelineDeparture_routeStop on RouteStop {\n  ...TimelineTitle\n}\n\nfragment TimelineArrival on RouteStop {\n  ...TimelineTitle\n}\n\nfragment TimelineDeparture_legInfo on Leg {\n  flightNumber\n  airline {\n    name\n    logoUrl\n  }\n}\n\nfragment TimelineTitle on RouteStop {\n  localTime\n  airport {\n    locationId\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment TripInfoOneWay on BookingOneWay {\n  trip {\n    ...TripCities\n    ...TripTimes\n  }\n}\n\nfragment TripInfoReturn on BookingReturn {\n  outbound {\n    ...TripCities\n    ...TripTimes\n  }\n  inbound {\n    ...TripTimes\n  }\n}\n\nfragment TripInfoMulticity on BookingMulticity {\n  trips {\n    ...TripCities\n    ...TripTimes\n  }\n}\n\nfragment TripCities on Trip {\n  departure {\n    ...Location\n  }\n  arrival {\n    ...Location\n  }\n}\n\nfragment TripTimes on Trip {\n  ...Duration\n  departure {\n    ...DateTime\n  }\n  arrival {\n    ...DateTime\n  }\n}\n\nfragment Duration on Trip {\n  duration\n}\n\nfragment DateTime on RouteStop {\n  localTime\n}\n\nfragment Location on RouteStop {\n  airport {\n    city {\n      name\n    }\n    ...CountryFlag\n    id\n  }\n}\n\nfragment CountryFlag on Location {\n  countryFlagURL\n}\n\nfragment StatusBarIcon on BookingInterface {\n  status\n  isPastBooking\n}\n\nfragment CardContent on BookingInterface {\n  __typename\n  ...ExploreOneWay\n  ...ExploreReturn\n  ...ExploreMulticity\n}\n\nfragment ExploreOneWay on BookingInterface {\n  ... on BookingOneWay {\n    trip {\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreReturn on BookingInterface {\n  ... on BookingReturn {\n    outbound {\n      ...ExploreVariant_trip\n      arrival {\n        time\n      }\n    }\n    inbound {\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreMulticity on BookingInterface {\n  ... on BookingMulticity {\n    trips {\n      arrival {\n        time\n      }\n      departure {\n        time\n      }\n      ...ExploreVariant_trip\n    }\n  }\n}\n\nfragment ExploreVariant_trip on Trip {\n  departure {\n    time\n  }\n  arrival {\n    ...BookingConfirmed_arrival\n  }\n  legs {\n    ...PriorToDeparture\n    departure {\n      ...BookingConfirmed_departure\n      time\n    }\n    id\n  }\n}\n\nfragment BookingConfirmed_arrival on RouteStop {\n  airport {\n    city {\n      name\n    }\n    id\n  }\n}\n\nfragment PriorToDeparture on Leg {\n  recheckRequired\n  departure {\n    localTime\n    gate\n    airport {\n      name\n      id\n    }\n  }\n  arrival {\n    airport {\n      name\n      id\n    }\n  }\n}\n\nfragment BookingConfirmed_departure on RouteStop {\n  time\n}\n",
   "metadata": {},
   "fragment": {
     "kind": "Fragment",
@@ -779,8 +812,8 @@ return {
                     ]
                   },
                   v11,
-                  v15,
-                  v16
+                  v14,
+                  v15
                 ]
               }
             ]
@@ -854,8 +887,8 @@ return {
                       v10
                     ]
                   },
-                  v15,
-                  v16
+                  v14,
+                  v15
                 ]
               },
               {
@@ -867,7 +900,33 @@ return {
                 "concreteType": "Trip",
                 "plural": false,
                 "selections": [
-                  v14,
+                  {
+                    "kind": "LinkedField",
+                    "alias": null,
+                    "name": "departure",
+                    "storageKey": null,
+                    "args": null,
+                    "concreteType": "RouteStop",
+                    "plural": false,
+                    "selections": [
+                      v6,
+                      v10,
+                      {
+                        "kind": "LinkedField",
+                        "alias": null,
+                        "name": "airport",
+                        "storageKey": null,
+                        "args": null,
+                        "concreteType": "Location",
+                        "plural": false,
+                        "selections": [
+                          v12,
+                          v7,
+                          v4
+                        ]
+                      }
+                    ]
+                  },
                   {
                     "kind": "LinkedField",
                     "alias": null,
@@ -894,8 +953,8 @@ return {
                       v10
                     ]
                   },
-                  v15,
-                  v16
+                  v14,
+                  v15
                 ]
               }
             ]
@@ -927,8 +986,8 @@ return {
                       v10
                     ]
                   },
-                  v15,
-                  v16
+                  v14,
+                  v15
                 ]
               }
             ]
diff --git a/app/MMB/src/components/exploreCity/ExploreButton.js b/app/MMB/src/components/exploreCity/ExploreButton.js
index 580fd0c9..1fb42433 100644
--- a/app/MMB/src/components/exploreCity/ExploreButton.js
+++ b/app/MMB/src/components/exploreCity/ExploreButton.js
@@ -5,9 +5,13 @@ import { View } from 'react-native';
 import { StyleSheet, TextButton } from '@kiwicom/mobile-shared';
 import { Translation } from '@kiwicom/mobile-localization';
 
-type Props = {|
-  +cityName: ?string,
-|};
+type Props =
+  | {|
+      +cityName: ?string,
+    |}
+  | {|
+      +airportName: string,
+    |};
 
 const onPress = () => {
   console.warn('TODO');
@@ -19,18 +23,22 @@ const onPress = () => {
  * This will make the button match the design
  */
 export default function ExploreButton(props: Props) {
+  const title =
+    props.cityName !== undefined ? (
+      <Translation
+        id="mmb.main_menu.explore_city.card_content.explore_city"
+        values={{ city: props.cityName || '' }}
+      />
+    ) : (
+      <Translation
+        id="mmb.main_menu.explore_city.card_content.explore_airport"
+        values={{ airport: props.airportName || '' }}
+      />
+    );
   return (
     <View style={styles.row}>
       <View>
-        <TextButton
-          title={
-            <Translation
-              id="mmb.main_menu.explore_city.card_content.explore"
-              values={{ city: props.cityName || '' }}
-            />
-          }
-          onPress={onPress}
-        />
+        <TextButton title={title} onPress={onPress} />
       </View>
       <View style={styles.item} />
     </View>
@@ -41,6 +49,7 @@ const styles = StyleSheet.create({
   row: {
     flexDirection: 'row',
     marginTop: 25,
+    paddingHorizontal: 20,
   },
   item: {
     flex: 1,
diff --git a/app/MMB/src/components/exploreCity/ExploreText.js b/app/MMB/src/components/exploreCity/ExploreText.js
index 081e24b4..b5c826b3 100644
--- a/app/MMB/src/components/exploreCity/ExploreText.js
+++ b/app/MMB/src/components/exploreCity/ExploreText.js
@@ -5,25 +5,17 @@ import { View } from 'react-native';
 import { type TranslationType } from '@kiwicom/mobile-localization';
 import { StyleSheet, Text, Color } from '@kiwicom/mobile-shared';
 
-import ExploreButton from './ExploreButton';
-
 type Props = {|
   +title: TranslationType,
-  +text: TranslationType,
-  +city: ?string,
+  +text: TranslationType | $ReadOnlyArray<TranslationType>,
 |};
 
 const ExploreText = (props: Props) => {
   return (
-    <React.Fragment>
-      <View style={styles.padding}>
-        <Text style={styles.title}>{props.title}</Text>
-        <Text style={styles.subText}>{props.text}</Text>
-      </View>
-      <View style={[styles.padding, styles.buttonContainer]}>
-        <ExploreButton cityName={props.city} />
-      </View>
-    </React.Fragment>
+    <View style={styles.padding}>
+      <Text style={styles.title}>{props.title}</Text>
+      <Text style={styles.subText}>{props.text}</Text>
+    </View>
   );
 };
 
@@ -42,7 +34,4 @@ const styles = StyleSheet.create({
   padding: {
     paddingHorizontal: 20,
   },
-  buttonContainer: {
-    marginBottom: 25,
-  },
 });
diff --git a/app/MMB/src/components/exploreCity/exploreVariants/BookingConfirmed.js b/app/MMB/src/components/exploreCity/exploreVariants/BookingConfirmed.js
index c781edb1..9aba868f 100644
--- a/app/MMB/src/components/exploreCity/exploreVariants/BookingConfirmed.js
+++ b/app/MMB/src/components/exploreCity/exploreVariants/BookingConfirmed.js
@@ -6,6 +6,7 @@ import { Translation, DateUtils } from '@kiwicom/mobile-localization';
 import idx from 'idx';
 
 import ExploreText from '../ExploreText';
+import ExploreButton from '../ExploreButton';
 import type { BookingConfirmed_arrival } from './__generated__/BookingConfirmed_arrival.graphql';
 import type { BookingConfirmed_departure } from './__generated__/BookingConfirmed_departure.graphql';
 
@@ -25,19 +26,21 @@ const BookingConfirmed = (props: Props) => {
   );
 
   return (
-    <ExploreText
-      city={idx(props.arrival, _ => _.airport.city.name)}
-      title={<Translation id="mmb.main_menu.explore_city.prepare_for_trip" />}
-      text={
-        <Translation
-          id="mmb.main_menu.explore_city.your_trip_in_days"
-          values={{
-            city: idx(props.arrival, _ => _.airport.city.name),
-            days: daysLeft,
-          }}
-        />
-      }
-    />
+    <React.Fragment>
+      <ExploreText
+        title={<Translation id="mmb.main_menu.explore_city.prepare_for_trip" />}
+        text={
+          <Translation
+            id="mmb.main_menu.explore_city.your_trip_in_days"
+            values={{
+              city: idx(props.arrival, _ => _.airport.city.name),
+              days: daysLeft,
+            }}
+          />
+        }
+      />
+      <ExploreButton cityName={idx(props.arrival, _ => _.airport.city.name)} />
+    </React.Fragment>
   );
 };
 
diff --git a/app/MMB/src/components/exploreCity/exploreVariants/ExploreVariant.js b/app/MMB/src/components/exploreCity/exploreVariants/ExploreVariant.js
index 87e556b7..db0a7958 100644
--- a/app/MMB/src/components/exploreCity/exploreVariants/ExploreVariant.js
+++ b/app/MMB/src/components/exploreCity/exploreVariants/ExploreVariant.js
@@ -6,13 +6,14 @@ import { graphql, createFragmentContainer } from '@kiwicom/mobile-relay';
 import { DateUtils } from '@kiwicom/mobile-localization';
 
 import BookingConfirmed from './BookingConfirmed';
+import PriorToDeparture from './PriorToDeparture';
 import type { ExploreVariant_trip } from './__generated__/ExploreVariant_trip.graphql';
 
 type Props = {|
   +trip: ExploreVariant_trip,
 |};
 
-const ExploreVariant = (props: Props) => {
+export const ExploreVariant = (props: Props) => {
   const rawDate = idx(props.trip, _ => _.departure.time);
 
   if (rawDate == null) {
@@ -32,6 +33,9 @@ const ExploreVariant = (props: Props) => {
       />
     );
   }
+  if (hoursToFlight > 0) {
+    return <PriorToDeparture data={idx(props.trip, _ => _.legs[0])} />;
+  }
   return null;
 };
 
@@ -46,6 +50,7 @@ export default createFragmentContainer(
         ...BookingConfirmed_arrival
       }
       legs {
+        ...PriorToDeparture
         departure {
           ...BookingConfirmed_departure
           time
diff --git a/app/MMB/src/components/exploreCity/exploreVariants/PriorToDeparture.js b/app/MMB/src/components/exploreCity/exploreVariants/PriorToDeparture.js
new file mode 100644
index 00000000..48620e03
--- /dev/null
+++ b/app/MMB/src/components/exploreCity/exploreVariants/PriorToDeparture.js
@@ -0,0 +1,96 @@
+// @flow strict
+
+import * as React from 'react';
+import { Translation, DateFormatter } from '@kiwicom/mobile-localization';
+import { graphql, createFragmentContainer } from '@kiwicom/mobile-relay';
+import idx from 'idx';
+
+import ExploreText from '../ExploreText';
+import ExploreButton from '../ExploreButton';
+import type { PriorToDeparture as SegmentType } from './__generated__/PriorToDeparture.graphql';
+
+type Props = {|
+  +data: SegmentType,
+|};
+
+export const PriorToDeparture = (props: Props) => {
+  const rawDepartureTime = idx(props.data, _ => _.departure.localTime);
+
+  if (rawDepartureTime == null) {
+    return null;
+  }
+  const airportName = idx(props.data, _ => _.arrival.airport.name) || '';
+  const text = [
+    <Translation
+      id="mmb.main_menu.explore_city.prior_to_departure.flying_to_destination"
+      values={{
+        destination: airportName,
+        time: DateFormatter(new Date(rawDepartureTime)).formatToTime(),
+      }}
+      key="flying-soon"
+    />,
+  ];
+  const gate = idx(props.data, _ => _.departure.gate);
+  const recheckRequired = idx(props.data, _ => _.recheckRequired);
+
+  if (gate && !recheckRequired) {
+    text.push(<Translation passThrough=" " key="space" />);
+    text.push(
+      <Translation
+        id="mmb.main_menu.explore_city.prior_to_departure.go_to_gate"
+        values={{ gate }}
+        key="go-to-gate"
+      />,
+    );
+  } else if (recheckRequired && !gate) {
+    text.push(<Translation passThrough=" " key="space" />);
+    text.push(
+      <Translation
+        id="mmb.main_menu.explore_city.prior_to_departure.recheck_your_bags"
+        key="recheck-bags"
+      />,
+    );
+  } else if (recheckRequired && gate) {
+    text.push(<Translation passThrough=" " key="space" />);
+    text.push(
+      <Translation
+        id="mmb.main_menu.explore_city.prior_to_departure.recheck_your_bags_and_go_to_gate"
+        values={{ gate }}
+        key="recheck-bags-and-go-to-gate"
+      />,
+    );
+  }
+
+  return (
+    <React.Fragment>
+      <ExploreText
+        title={
+          <Translation id="mmb.main_menu.explore_city.prior_to_departure.flying_soon" />
+        }
+        text={text}
+      />
+      <ExploreButton airportName={airportName} />
+    </React.Fragment>
+  );
+};
+
+export default createFragmentContainer(
+  PriorToDeparture,
+  graphql`
+    fragment PriorToDeparture on Leg {
+      recheckRequired
+      departure {
+        localTime
+        gate
+        airport {
+          name
+        }
+      }
+      arrival {
+        airport {
+          name
+        }
+      }
+    }
+  `,
+);
diff --git a/app/MMB/src/components/exploreCity/exploreVariants/__generated__/ExploreVariant_trip.graphql.js b/app/MMB/src/components/exploreCity/exploreVariants/__generated__/ExploreVariant_trip.graphql.js
index 43129792..e64e6132 100644
--- a/app/MMB/src/components/exploreCity/exploreVariants/__generated__/ExploreVariant_trip.graphql.js
+++ b/app/MMB/src/components/exploreCity/exploreVariants/__generated__/ExploreVariant_trip.graphql.js
@@ -10,6 +10,7 @@
 import type { ConcreteFragment } from 'relay-runtime';
 type BookingConfirmed_arrival$ref = any;
 type BookingConfirmed_departure$ref = any;
+type PriorToDeparture$ref = any;
 import type { FragmentReference } from "relay-runtime";
 declare export opaque type ExploreVariant_trip$ref: FragmentReference;
 export type ExploreVariant_trip = {|
@@ -23,7 +24,8 @@ export type ExploreVariant_trip = {|
     +departure: ?{|
       +time: ?any,
       +$fragmentRefs: BookingConfirmed_departure$ref,
-    |}
+    |},
+    +$fragmentRefs: PriorToDeparture$ref,
   |}>,
   +$refType: ExploreVariant_trip$ref,
 |};
@@ -82,6 +84,11 @@ return {
       "concreteType": "Leg",
       "plural": true,
       "selections": [
+        {
+          "kind": "FragmentSpread",
+          "name": "PriorToDeparture",
+          "args": null
+        },
         {
           "kind": "LinkedField",
           "alias": null,
@@ -105,5 +112,5 @@ return {
 };
 })();
 // prettier-ignore
-(node/*: any*/).hash = '721f670075c8767d84b1d6cf4f9f0c5a';
+(node/*: any*/).hash = 'dba69b27f6d7e66ade69c5a54f33b615';
 module.exports = node;
diff --git a/app/MMB/src/components/exploreCity/exploreVariants/__generated__/PriorToDeparture.graphql.js b/app/MMB/src/components/exploreCity/exploreVariants/__generated__/PriorToDeparture.graphql.js
new file mode 100644
index 00000000..2c16fa18
--- /dev/null
+++ b/app/MMB/src/components/exploreCity/exploreVariants/__generated__/PriorToDeparture.graphql.js
@@ -0,0 +1,108 @@
+/**
+ * @flow
+ */
+
+/* eslint-disable */
+
+'use strict';
+
+/*::
+import type { ConcreteFragment } from 'relay-runtime';
+import type { FragmentReference } from "relay-runtime";
+declare export opaque type PriorToDeparture$ref: FragmentReference;
+export type PriorToDeparture = {|
+  +recheckRequired: ?boolean,
+  +departure: ?{|
+    +localTime: ?any,
+    +gate: ?string,
+    +airport: ?{|
+      +name: ?string
+    |},
+  |},
+  +arrival: ?{|
+    +airport: ?{|
+      +name: ?string
+    |}
+  |},
+  +$refType: PriorToDeparture$ref,
+|};
+*/
+
+
+const node/*: ConcreteFragment*/ = (function(){
+var v0 = {
+  "kind": "LinkedField",
+  "alias": null,
+  "name": "airport",
+  "storageKey": null,
+  "args": null,
+  "concreteType": "Location",
+  "plural": false,
+  "selections": [
+    {
+      "kind": "ScalarField",
+      "alias": null,
+      "name": "name",
+      "args": null,
+      "storageKey": null
+    }
+  ]
+};
+return {
+  "kind": "Fragment",
+  "name": "PriorToDeparture",
+  "type": "Leg",
+  "metadata": null,
+  "argumentDefinitions": [],
+  "selections": [
+    {
+      "kind": "ScalarField",
+      "alias": null,
+      "name": "recheckRequired",
+      "args": null,
+      "storageKey": null
+    },
+    {
+      "kind": "LinkedField",
+      "alias": null,
+      "name": "departure",
+      "storageKey": null,
+      "args": null,
+      "concreteType": "RouteStop",
+      "plural": false,
+      "selections": [
+        {
+          "kind": "ScalarField",
+          "alias": null,
+          "name": "localTime",
+          "args": null,
+          "storageKey": null
+        },
+        {
+          "kind": "ScalarField",
+          "alias": null,
+          "name": "gate",
+          "args": null,
+          "storageKey": null
+        },
+        v0
+      ]
+    },
+    {
+      "kind": "LinkedField",
+      "alias": null,
+      "name": "arrival",
+      "storageKey": null,
+      "args": null,
+      "concreteType": "RouteStop",
+      "plural": false,
+      "selections": [
+        v0
+      ]
+    }
+  ]
+};
+})();
+// prettier-ignore
+(node/*: any*/).hash = 'ad881ca22af9d50e88341b321f8226e8';
+module.exports = node;
diff --git a/app/MMB/src/scenes/explore/ExploreAirportGroup.js b/app/MMB/src/scenes/explore/ExploreAirportGroup.js
index 7751c849..382d651a 100644
--- a/app/MMB/src/scenes/explore/ExploreAirportGroup.js
+++ b/app/MMB/src/scenes/explore/ExploreAirportGroup.js
@@ -33,7 +33,7 @@ const ExploreAirportGroup = (props: Props) => {
 
   return (
     <TitledMenuGroup title={<Translation id="mmb.explore.airports" />}>
-      {uniqBy(locations, 'city.code').map((location, index) => {
+      {uniqBy(locations, 'city.code').map(location => {
         return (
           <MenuItem
             isActive={false}
@@ -47,7 +47,7 @@ const ExploreAirportGroup = (props: Props) => {
                 passThrough={idx(location, _ => _.city.code) || ''}
               />
             }
-            key={`${location.locationId}-${index}`}
+            key={location.id}
             onPress={todo}
             icon={<TextIcon code="a" style={styles.icon} />}
           />
@@ -64,9 +64,9 @@ export default createFragmentContainer(
       id
       departure {
         airport {
+          id
           type
           city {
-            locationId
             name
             code
           }
@@ -74,9 +74,9 @@ export default createFragmentContainer(
       }
       arrival {
         airport {
+          id
           type
           city {
-            locationId
             name
             code
           }
diff --git a/app/MMB/src/scenes/explore/ExploreDestinationsGroup.js b/app/MMB/src/scenes/explore/ExploreDestinationsGroup.js
index eb76cd3d..e1449363 100644
--- a/app/MMB/src/scenes/explore/ExploreDestinationsGroup.js
+++ b/app/MMB/src/scenes/explore/ExploreDestinationsGroup.js
@@ -21,25 +21,30 @@ const todo = () => {
 const ExploreDestinationsGroup = (props: Props) => {
   const trips = props.data || [];
 
+  const destinations = [
+    ...trips.map(trip => trip.departure),
+    ...trips.map(trip => trip.arrival),
+  ];
+
   return (
     <TitledMenuGroup title={<Translation id="mmb.explore.destinations" />}>
-      {uniqBy(trips, 'arrival.airport.city.name').map((trip, index) => {
+      {uniqBy(destinations, 'airport.code').map(destination => {
         return (
           <MenuItem
             isActive={false}
             title={
               <Translation
-                passThrough={idx(trip, _ => _.arrival.airport.city.name) || ''}
+                passThrough={idx(destination, _ => _.airport.city.name) || ''}
               />
             }
             description={
               <Translation
                 passThrough={
-                  idx(trip, _ => _.arrival.airport.country.name) || ''
+                  idx(destination, _ => _.airport.country.name) || ''
                 }
               />
             }
-            key={`${trip.arrival.airport.id}-${index}`}
+            key={destination.airport.id}
             onPress={todo}
             icon={<TextIcon code="c" />}
           />
@@ -56,6 +61,7 @@ export default createFragmentContainer(
       departure {
         airport {
           id
+          code
           country {
             name
           }
@@ -67,6 +73,7 @@ export default createFragmentContainer(
       arrival {
         airport {
           id
+          code
           country {
             name
           }
diff --git a/app/MMB/src/scenes/explore/__generated__/ExploreAirportGroup.graphql.js b/app/MMB/src/scenes/explore/__generated__/ExploreAirportGroup.graphql.js
index 4016a20b..87682285 100644
--- a/app/MMB/src/scenes/explore/__generated__/ExploreAirportGroup.graphql.js
+++ b/app/MMB/src/scenes/explore/__generated__/ExploreAirportGroup.graphql.js
@@ -14,9 +14,9 @@ export type ExploreAirportGroup = $ReadOnlyArray<{|
   +id: string,
   +departure: ?{|
     +airport: ?{|
+      +id: string,
       +type: ?string,
       +city: ?{|
-        +locationId: ?string,
         +name: ?string,
         +code: ?string,
       |},
@@ -24,9 +24,9 @@ export type ExploreAirportGroup = $ReadOnlyArray<{|
   |},
   +arrival: ?{|
     +airport: ?{|
+      +id: string,
       +type: ?string,
       +city: ?{|
-        +locationId: ?string,
         +name: ?string,
         +code: ?string,
       |},
@@ -38,7 +38,14 @@ export type ExploreAirportGroup = $ReadOnlyArray<{|
 
 
 const node/*: ConcreteFragment*/ = (function(){
-var v0 = [
+var v0 = {
+  "kind": "ScalarField",
+  "alias": null,
+  "name": "id",
+  "args": null,
+  "storageKey": null
+},
+v1 = [
   {
     "kind": "LinkedField",
     "alias": null,
@@ -48,6 +55,7 @@ var v0 = [
     "concreteType": "Location",
     "plural": false,
     "selections": [
+      v0,
       {
         "kind": "ScalarField",
         "alias": null,
@@ -64,13 +72,6 @@ var v0 = [
         "concreteType": "LocationArea",
         "plural": false,
         "selections": [
-          {
-            "kind": "ScalarField",
-            "alias": null,
-            "name": "locationId",
-            "args": null,
-            "storageKey": null
-          },
           {
             "kind": "ScalarField",
             "alias": null,
@@ -99,13 +100,7 @@ return {
   },
   "argumentDefinitions": [],
   "selections": [
-    {
-      "kind": "ScalarField",
-      "alias": null,
-      "name": "id",
-      "args": null,
-      "storageKey": null
-    },
+    v0,
     {
       "kind": "LinkedField",
       "alias": null,
@@ -114,7 +109,7 @@ return {
       "args": null,
       "concreteType": "RouteStop",
       "plural": false,
-      "selections": v0
+      "selections": v1
     },
     {
       "kind": "LinkedField",
@@ -124,11 +119,11 @@ return {
       "args": null,
       "concreteType": "RouteStop",
       "plural": false,
-      "selections": v0
+      "selections": v1
     }
   ]
 };
 })();
 // prettier-ignore
-(node/*: any*/).hash = 'cc7dc7a3f7cf7de9924b7d2895c3f2c4';
+(node/*: any*/).hash = 'e6d8ca8d4713aa69bd4fdef4112dbe2b';
 module.exports = node;
diff --git a/app/MMB/src/scenes/explore/__generated__/ExploreDestinationsGroup.graphql.js b/app/MMB/src/scenes/explore/__generated__/ExploreDestinationsGroup.graphql.js
index b646debe..34bbe226 100644
--- a/app/MMB/src/scenes/explore/__generated__/ExploreDestinationsGroup.graphql.js
+++ b/app/MMB/src/scenes/explore/__generated__/ExploreDestinationsGroup.graphql.js
@@ -14,6 +14,7 @@ export type ExploreDestinationsGroup = $ReadOnlyArray<{|
   +departure: ?{|
     +airport: ?{|
       +id: string,
+      +code: ?string,
       +country: ?{|
         +name: ?string
       |},
@@ -25,6 +26,7 @@ export type ExploreDestinationsGroup = $ReadOnlyArray<{|
   +arrival: ?{|
     +airport: ?{|
       +id: string,
+      +code: ?string,
       +country: ?{|
         +name: ?string
       |},
@@ -65,6 +67,13 @@ v1 = [
         "args": null,
         "storageKey": null
       },
+      {
+        "kind": "ScalarField",
+        "alias": null,
+        "name": "code",
+        "args": null,
+        "storageKey": null
+      },
       {
         "kind": "LinkedField",
         "alias": null,
@@ -121,5 +130,5 @@ return {
 };
 })();
 // prettier-ignore
-(node/*: any*/).hash = '3f2d55a2fe8316c2a0b7f817a5c24ddf';
+(node/*: any*/).hash = '9848c840e1bfa718521d376fc89220d3';
 module.exports = node;
diff --git a/app/MMB/src/scenes/explore/__generated__/ExploreQuery.graphql.js b/app/MMB/src/scenes/explore/__generated__/ExploreQuery.graphql.js
index 3ccc1e8b..e06ee383 100644
--- a/app/MMB/src/scenes/explore/__generated__/ExploreQuery.graphql.js
+++ b/app/MMB/src/scenes/explore/__generated__/ExploreQuery.graphql.js
@@ -1,6 +1,6 @@
 /**
  * @flow
- * @relayHash 30306257cbf7787f0d964c08108ac593
+ * @relayHash c52bec0e3a89b1cf93ab214d6c4f789b
  */
 
 /* eslint-disable */
@@ -96,6 +96,7 @@ fragment ExploreDestinationsGroup on Trip {
   departure {
     airport {
       id
+      code
       country {
         name
       }
@@ -107,6 +108,7 @@ fragment ExploreDestinationsGroup on Trip {
   arrival {
     airport {
       id
+      code
       country {
         name
       }
@@ -121,24 +123,22 @@ fragment ExploreAirportGroup on Leg {
   id
   departure {
     airport {
+      id
       type
       city {
-        locationId
         name
         code
       }
-      id
     }
   }
   arrival {
     airport {
+      id
       type
       city {
-        locationId
         name
         code
       }
-      id
     }
   }
 }
@@ -188,16 +188,23 @@ v3 = {
   "storageKey": null
 },
 v4 = {
+  "kind": "ScalarField",
+  "alias": null,
+  "name": "code",
+  "args": null,
+  "storageKey": null
+},
+v5 = {
   "kind": "ScalarField",
   "alias": null,
   "name": "name",
   "args": null,
   "storageKey": null
 },
-v5 = [
-  v4
-],
 v6 = [
+  v5
+],
+v7 = [
   {
     "kind": "LinkedField",
     "alias": null,
@@ -208,6 +215,7 @@ v6 = [
     "plural": false,
     "selections": [
       v3,
+      v4,
       {
         "kind": "LinkedField",
         "alias": null,
@@ -216,7 +224,7 @@ v6 = [
         "args": null,
         "concreteType": "LocationArea",
         "plural": false,
-        "selections": v5
+        "selections": v6
       },
       {
         "kind": "LinkedField",
@@ -226,12 +234,12 @@ v6 = [
         "args": null,
         "concreteType": "LocationArea",
         "plural": false,
-        "selections": v5
+        "selections": v6
       }
     ]
   }
 ],
-v7 = [
+v8 = [
   {
     "kind": "LinkedField",
     "alias": null,
@@ -241,6 +249,7 @@ v7 = [
     "concreteType": "Location",
     "plural": false,
     "selections": [
+      v3,
       {
         "kind": "ScalarField",
         "alias": null,
@@ -257,28 +266,14 @@ v7 = [
         "concreteType": "LocationArea",
         "plural": false,
         "selections": [
-          {
-            "kind": "ScalarField",
-            "alias": null,
-            "name": "locationId",
-            "args": null,
-            "storageKey": null
-          },
-          v4,
-          {
-            "kind": "ScalarField",
-            "alias": null,
-            "name": "code",
-            "args": null,
-            "storageKey": null
-          }
+          v5,
+          v4
         ]
-      },
-      v3
+      }
     ]
   }
 ],
-v8 = [
+v9 = [
   {
     "kind": "LinkedField",
     "alias": null,
@@ -287,7 +282,7 @@ v8 = [
     "args": null,
     "concreteType": "RouteStop",
     "plural": false,
-    "selections": v6
+    "selections": v7
   },
   {
     "kind": "LinkedField",
@@ -297,7 +292,7 @@ v8 = [
     "args": null,
     "concreteType": "RouteStop",
     "plural": false,
-    "selections": v6
+    "selections": v7
   },
   {
     "kind": "LinkedField",
@@ -317,7 +312,7 @@ v8 = [
         "args": null,
         "concreteType": "RouteStop",
         "plural": false,
-        "selections": v7
+        "selections": v8
       },
       {
         "kind": "LinkedField",
@@ -327,7 +322,7 @@ v8 = [
         "args": null,
         "concreteType": "RouteStop",
         "plural": false,
-        "selections": v7
+        "selections": v8
       }
     ]
   }
@@ -337,7 +332,7 @@ return {
   "operationKind": "query",
   "name": "ExploreQuery",
   "id": null,
-  "text": "query ExploreQuery(\n  $id: Int!\n  $authToken: String!\n) {\n  singleBooking(id: $id, authToken: $authToken) {\n    __typename\n    ... on BookingOneWay {\n      ...ExploreBookingOneWay\n    }\n    ... on BookingMulticity {\n      ...ExploreBookingMulticity\n    }\n    ... on BookingReturn {\n      ...ExploreBookingReturn\n    }\n    id\n  }\n}\n\nfragment ExploreBookingOneWay on BookingOneWay {\n  trip {\n    ...ExploreDestinationsGroup\n    legs {\n      ...ExploreAirportGroup\n      id\n    }\n  }\n}\n\nfragment ExploreBookingMulticity on BookingMulticity {\n  trips {\n    ...ExploreDestinationsGroup\n    legs {\n      ...ExploreAirportGroup\n      id\n    }\n  }\n}\n\nfragment ExploreBookingReturn on BookingReturn {\n  outbound {\n    ...ExploreDestinationsGroup\n    legs {\n      ...ExploreAirportGroup\n      id\n    }\n  }\n  inbound {\n    ...ExploreDestinationsGroup\n    legs {\n      ...ExploreAirportGroup\n      id\n    }\n  }\n}\n\nfragment ExploreDestinationsGroup on Trip {\n  departure {\n    airport {\n      id\n      country {\n        name\n      }\n      city {\n        name\n      }\n    }\n  }\n  arrival {\n    airport {\n      id\n      country {\n        name\n      }\n      city {\n        name\n      }\n    }\n  }\n}\n\nfragment ExploreAirportGroup on Leg {\n  id\n  departure {\n    airport {\n      type\n      city {\n        locationId\n        name\n        code\n      }\n      id\n    }\n  }\n  arrival {\n    airport {\n      type\n      city {\n        locationId\n        name\n        code\n      }\n      id\n    }\n  }\n}\n",
+  "text": "query ExploreQuery(\n  $id: Int!\n  $authToken: String!\n) {\n  singleBooking(id: $id, authToken: $authToken) {\n    __typename\n    ... on BookingOneWay {\n      ...ExploreBookingOneWay\n    }\n    ... on BookingMulticity {\n      ...ExploreBookingMulticity\n    }\n    ... on BookingReturn {\n      ...ExploreBookingReturn\n    }\n    id\n  }\n}\n\nfragment ExploreBookingOneWay on BookingOneWay {\n  trip {\n    ...ExploreDestinationsGroup\n    legs {\n      ...ExploreAirportGroup\n      id\n    }\n  }\n}\n\nfragment ExploreBookingMulticity on BookingMulticity {\n  trips {\n    ...ExploreDestinationsGroup\n    legs {\n      ...ExploreAirportGroup\n      id\n    }\n  }\n}\n\nfragment ExploreBookingReturn on BookingReturn {\n  outbound {\n    ...ExploreDestinationsGroup\n    legs {\n      ...ExploreAirportGroup\n      id\n    }\n  }\n  inbound {\n    ...ExploreDestinationsGroup\n    legs {\n      ...ExploreAirportGroup\n      id\n    }\n  }\n}\n\nfragment ExploreDestinationsGroup on Trip {\n  departure {\n    airport {\n      id\n      code\n      country {\n        name\n      }\n      city {\n        name\n      }\n    }\n  }\n  arrival {\n    airport {\n      id\n      code\n      country {\n        name\n      }\n      city {\n        name\n      }\n    }\n  }\n}\n\nfragment ExploreAirportGroup on Leg {\n  id\n  departure {\n    airport {\n      id\n      type\n      city {\n        name\n        code\n      }\n    }\n  }\n  arrival {\n    airport {\n      id\n      type\n      city {\n        name\n        code\n      }\n    }\n  }\n}\n",
   "metadata": {},
   "fragment": {
     "kind": "Fragment",
@@ -421,7 +416,7 @@ return {
                 "args": null,
                 "concreteType": "Trip",
                 "plural": false,
-                "selections": v8
+                "selections": v9
               },
               {
                 "kind": "LinkedField",
@@ -431,7 +426,7 @@ return {
                 "args": null,
                 "concreteType": "Trip",
                 "plural": false,
-                "selections": v8
+                "selections": v9
               }
             ]
           },
@@ -447,7 +442,7 @@ return {
                 "args": null,
                 "concreteType": "Trip",
                 "plural": true,
-                "selections": v8
+                "selections": v9
               }
             ]
           },
@@ -463,7 +458,7 @@ return {
                 "args": null,
                 "concreteType": "Trip",
                 "plural": false,
-                "selections": v8
+                "selections": v9
               }
             ]
           }
diff --git a/packages/localization/src/vocabularies/ManageMyBooking.js b/packages/localization/src/vocabularies/ManageMyBooking.js
index 18908c5e..ab3f1d2b 100644
--- a/packages/localization/src/vocabularies/ManageMyBooking.js
+++ b/packages/localization/src/vocabularies/ManageMyBooking.js
@@ -255,9 +255,21 @@ export default {
     'Your trip to __1_city__ is in __2_days__ days',
   'mmb.main_menu.explore_city.spending_time_in': 'Spending time in __city__?',
   'mmb.main_menu.explore_city.find_stuff_to_do': 'Find something to do',
-  'mmb.main_menu.explore_city.card_content.explore': 'Explore __city__',
+  'mmb.main_menu.explore_city.card_content.explore_city': 'Explore __city__',
+  'mmb.main_menu.explore_city.card_content.explore_airport':
+    'Explore __airport__ airport',
   'mmb.main_menu.explore_city.explore_menu_group.order_transport':
     'Order transportation to __iata__',
+  'mmb.main_menu.explore_city.prior_to_departure.flying_soon':
+    "You're flying soon",
+  'mmb.main_menu.explore_city.prior_to_departure.flying_to_destination':
+    'Your flight to __1_destination__ departs at __2_time__.',
+  'mmb.main_menu.explore_city.prior_to_departure.go_to_gate':
+    'Go to gate __gate__.',
+  'mmb.main_menu.explore_city.prior_to_departure.recheck_your_bags':
+    "Don't forget to recheck your bags.",
+  'mmb.main_menu.explore_city.prior_to_departure.recheck_your_bags_and_go_to_gate':
+    "Don't forget to recheck your bags, then go to gate __gate__.",
 
   'mmb.main_menu.manage': 'Manage',
   'mmb.main_menu.manage.help': 'Help',
diff --git a/schema.graphql b/schema.graphql
index 3a8321f5..d7b19cbf 100644
--- a/schema.graphql
+++ b/schema.graphql
@@ -2158,6 +2158,9 @@ type RouteStop {
 
   """Terminal of the route stop"""
   terminal: String
+
+  """Gate for the route stop"""
+  gate: String
 }
 
 type Services {


Test patch:
diff --git a/app/MMB/src/components/exploreCity/exploreVariants/__tests__/ExploreVariant.test.js b/app/MMB/src/components/exploreCity/exploreVariants/__tests__/ExploreVariant.test.js
new file mode 100644
index 00000000..6024763d
--- /dev/null
+++ b/app/MMB/src/components/exploreCity/exploreVariants/__tests__/ExploreVariant.test.js
@@ -0,0 +1,60 @@
+// @flow
+
+import * as React from 'react';
+import ShallowRenderer from 'react-test-renderer/shallow';
+import { DateUtils } from '@kiwicom/mobile-localization';
+
+import { ExploreVariant } from '../ExploreVariant';
+
+const renderer = new ShallowRenderer();
+
+const getWrapper = props => {
+  // $FlowExpectedError: Passing just what is needed for test to run
+  renderer.render(<ExploreVariant trip={props} />);
+  return renderer.getRenderOutput();
+};
+
+let originalGetUtcNow;
+
+beforeEach(() => {
+  originalGetUtcNow = DateUtils.getUTCNow;
+});
+
+afterEach(() => {
+  DateUtils.getUTCNow = originalGetUtcNow;
+});
+
+describe('ExploreVariant', () => {
+  it('should render booking confirmed if it is more than 8 hours to departure', () => {
+    DateUtils.getUTCNow = jest.fn(() => new Date(2018, 11, 24, 9, 59, 59, 0));
+    const data = {
+      departure: {
+        time: new Date(2018, 11, 24, 18, 0, 0, 0),
+      },
+    };
+    const wrapper = getWrapper(data);
+    expect(wrapper.type.displayName).toEqual('Relay(BookingConfirmed)');
+  });
+
+  it('should render PriorToDeparture if it is 8 hours or less to departure', () => {
+    DateUtils.getUTCNow = jest.fn(() => new Date(2018, 11, 24, 10, 0, 0, 0));
+    const data = {
+      departure: {
+        time: new Date(2018, 11, 24, 18, 0, 0, 0),
+      },
+    };
+    const wrapper = getWrapper(data);
+    expect(wrapper.type.displayName).toEqual('Relay(PriorToDeparture)');
+  });
+
+  it('should render null if it is 0 hours to departure', () => {
+    DateUtils.getUTCNow = jest.fn(() => new Date(2018, 11, 24, 18, 0, 0, 0));
+    const data = {
+      departure: {
+        time: new Date(2018, 11, 24, 18, 0, 0, 0),
+      },
+    };
+    const wrapper = getWrapper(data);
+    expect(wrapper).toBe(null);
+  });
+});
diff --git a/app/MMB/src/components/exploreCity/exploreVariants/__tests__/PriorToDeparture.test.js b/app/MMB/src/components/exploreCity/exploreVariants/__tests__/PriorToDeparture.test.js
new file mode 100644
index 00000000..1aff41a4
--- /dev/null
+++ b/app/MMB/src/components/exploreCity/exploreVariants/__tests__/PriorToDeparture.test.js
@@ -0,0 +1,72 @@
+// @flow
+
+import * as React from 'react';
+import renderer from 'react-test-renderer';
+
+import { PriorToDeparture } from '../PriorToDeparture';
+
+const getWrapper = (props: Object) => {
+  return renderer.create(<PriorToDeparture data={props} />);
+};
+
+describe('PriorToDeparture', () => {
+  it('renders only flying soon if gate and recheckRequired are false', () => {
+    const instance = getWrapper({
+      departure: {
+        localTime: new Date(),
+      },
+    });
+
+    expect(instance.toTree().rendered[0].props.text.length).toBe(1);
+    expect(instance.toTree().rendered[0].props.text[0].key).toBe('flying-soon');
+  });
+
+  it('renders go-to-gate if gate is defined and recheck required is false', () => {
+    const instance = getWrapper({
+      recheckRequired: false,
+      departure: {
+        localTime: new Date(),
+        gate: '5',
+      },
+    });
+
+    expect(instance.toTree().rendered[0].props.text.length).toBe(3);
+    expect(instance.toTree().rendered[0].props.text[0].key).toBe('flying-soon');
+    expect(instance.toTree().rendered[0].props.text[1].key).toBe('space');
+    expect(instance.toTree().rendered[0].props.text[2].key).toBe('go-to-gate');
+  });
+
+  it('renders recheck-bags if gate is null and recheck required is true', () => {
+    const instance = getWrapper({
+      recheckRequired: true,
+      departure: {
+        localTime: new Date(),
+        gate: null,
+      },
+    });
+
+    expect(instance.toTree().rendered[0].props.text.length).toBe(3);
+    expect(instance.toTree().rendered[0].props.text[0].key).toBe('flying-soon');
+    expect(instance.toTree().rendered[0].props.text[1].key).toBe('space');
+    expect(instance.toTree().rendered[0].props.text[2].key).toBe(
+      'recheck-bags',
+    );
+  });
+
+  it('renders recheck-bags-and-go-to-gate if gate is defined and recheck required is true', () => {
+    const instance = getWrapper({
+      recheckRequired: true,
+      departure: {
+        localTime: new Date(),
+        gate: '4',
+      },
+    });
+
+    expect(instance.toTree().rendered[0].props.text.length).toBe(3);
+    expect(instance.toTree().rendered[0].props.text[0].key).toBe('flying-soon');
+    expect(instance.toTree().rendered[0].props.text[1].key).toBe('space');
+    expect(instance.toTree().rendered[0].props.text[2].key).toBe(
+      'recheck-bags-and-go-to-gate',
+    );
+  });
+});