alm-search-01
Version:
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
666 lines (604 loc) • 25.4 kB
JavaScript
"use strict";
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _Button = _interopRequireDefault(require("@material-ui/core/Button"));
var _ButtonField = _interopRequireDefault(require("./ButtonField"));
var _fields = require("./fields");
var _moment = _interopRequireDefault(require("moment"));
var _SwapVert = _interopRequireDefault(require("@material-ui/icons/SwapVert"));
var _DropDown = _interopRequireDefault(require("./components/DropDown"));
var _styles = require("@material-ui/core/styles");
var _AirlineSeatReclineExtra = _interopRequireDefault(require("@material-ui/icons/AirlineSeatReclineExtra"));
var _FlightTakeoff = _interopRequireDefault(require("@material-ui/icons/FlightTakeoff"));
var _FlightLand = _interopRequireDefault(require("@material-ui/icons/FlightLand"));
var _SupervisorAccount = _interopRequireDefault(require("@material-ui/icons/SupervisorAccount"));
var _axios = _interopRequireDefault(require("axios"));
var _ReturnTripDateRangePicker = _interopRequireDefault(require("./fields/ReturnTripDateRangePicker"));
var _OneWayTripDateRangePicker = _interopRequireDefault(require("./fields/OneWayTripDateRangePicker"));
var _getHotelsLocale2 = _interopRequireDefault(require("./utils/getHotelsLocale"));
var _brandStyles = _interopRequireDefault(require("./utils/brandStyles"));
var _fare = require("@tajawalae/web-flight-sdk/lib/clients/fare.client");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var useStyles = (0, _styles.makeStyles)(function (theme) {
return {
app: {
display: 'flex',
flexFlow: 'wrap',
position: 'relative',
fontFamily: '"Roboto", Helvetica, Arial, sans-serif',
fontWeight: 'normal',
fontStretch: 'normal',
fontStyle: 'normal',
flexGrow: 1,
maxWidth: '100%',
flexBasis: 0,
padding: '15px 0'
},
container: {
display: "flex",
width: "100%",
margin: '4px 0'
},
containerBtn: {
display: "flex",
flexDirection: "row",
alignItems: "center",
justifyContent: "center",
marginBottom: 16,
flex: 1
},
icon: {
paddingRight: 12,
paddingLeft: 4
},
wrapper: {
margin: '12px 4px 4px',
position: "relative",
width: "100%"
},
containerArrowsIcon: {
marginLeft: "calc(100% - 55px)",
marginRight: "calc(100% - 55px)",
marginTop: -20,
position: "relative"
},
CompareArrowsIcon: {
color: function color(getBrandStyles) {
return getBrandStyles.greenBlueColor;
},
boxShadow: '0 1px 8px 0 rgba(0, 0, 0, 0.1)',
padding: 6,
background: "#fff",
transition: ".2s ease-in-out",
borderRadius: "50%",
position: "absolute",
left: 0,
right: 0,
top: 0,
zIndex: 1,
cursor: "pointer",
fontSize: 36
},
primaryBtn: {
backgroundColor: "#fff",
fontSize: 12,
fontWeight: '500',
lineHeight: 1.58,
width: 110,
textTransform: "capitalize",
height: 40,
margin: "0 8px",
borderRadius: 4,
borderStyle: 'solid',
borderWidth: 1,
borderColor: function borderColor(getBrandStyles) {
return getBrandStyles.rgbaBorderColor;
},
boxShadow: function boxShadow(getBrandStyles) {
return getBrandStyles.boxShadowBtn;
},
color: function color(getBrandStyles) {
return getBrandStyles.greenBlueColor;
},
"&:hover,:focus,&.active": {
borderStyle: 'solid',
borderWidth: 1,
borderColor: function borderColor(getBrandStyles) {
return getBrandStyles.rgbaBorderColorAct;
},
boxShadow: function boxShadow(getBrandStyles) {
return getBrandStyles.boxShadowBtnAct;
},
backgroundColor: function backgroundColor(getBrandStyles) {
return getBrandStyles.bgRgbaColorAct;
}
}
},
errorContainer: {
alignItems: "center"
},
error: {},
buttonProgress: {
position: "absolute",
top: "50%",
left: "50%",
marginTop: -12,
marginLeft: -12
},
button: {
padding: "8px 16px",
background: function background(getBrandStyles) {
return getBrandStyles.btnColor;
},
borderRadius: "4px",
border: "0",
height: "40px",
fontSize: "16px",
lineHeight: '20px',
fontWeight: "500",
width: "100%",
textTransform: "capitalize",
boxShadow: 'inset 0 -2px 0 0 rgba(0, 0, 0, 0.2)',
"&:hover": {
border: "0",
background: function background(getBrandStyles) {
return getBrandStyles.btnColor;
}
}
}
};
});
function Flights(_ref) {
var _ref$departureDate = _ref.departureDate,
departureDate = _ref$departureDate === void 0 ? (0, _moment.default)().add(1, "day") : _ref$departureDate,
_ref$returnDate = _ref.returnDate,
returnDate = _ref$returnDate === void 0 ? (0, _moment.default)().add(2, "day") : _ref$returnDate,
lang = _ref.lang,
brand = _ref.brand,
_ref$origin = _ref.origin,
origin = _ref$origin === void 0 ? '' : _ref$origin,
_ref$originIata = _ref.originIata,
originIata = _ref$originIata === void 0 ? '' : _ref$originIata,
_ref$destination = _ref.destination,
destination = _ref$destination === void 0 ? '' : _ref$destination,
_ref$destinationIata = _ref.destinationIata,
destinationIata = _ref$destinationIata === void 0 ? '' : _ref$destinationIata,
_ref$defaultAdult = _ref.defaultAdult,
defaultAdult = _ref$defaultAdult === void 0 ? 1 : _ref$defaultAdult,
_ref$defaultChild = _ref.defaultChild,
defaultChild = _ref$defaultChild === void 0 ? 0 : _ref$defaultChild,
_ref$defaultInfants = _ref.defaultInfants,
defaultInfants = _ref$defaultInfants === void 0 ? 0 : _ref$defaultInfants,
isMobile = _ref.isMobile,
page = _ref.page;
var classes = useStyles((0, _brandStyles.default)(brand));
var _getHotelsLocale = (0, _getHotelsLocale2.default)(lang),
one_way = _getHotelsLocale.one_way,
round_trip = _getHotelsLocale.round_trip,
from = _getHotelsLocale.from,
to = _getHotelsLocale.to,
choose_departure = _getHotelsLocale.choose_departure,
choose_arrival = _getHotelsLocale.choose_arrival,
passengers = _getHotelsLocale.passengers,
adult_label = _getHotelsLocale.adult_label,
cabin_class = _getHotelsLocale.cabin_class,
search_flight = _getHotelsLocale.search_flight,
infants_label = _getHotelsLocale.infants_label,
child_value = _getHotelsLocale.child_value,
economy_label = _getHotelsLocale.economy_label;
_react.default.useEffect(function () {
document.body.dir = lang === 'ar' ? 'rtl' : 'ltr';
}, [lang]);
var tripDatesInitials = {
departureDate: departureDate
};
var tripPassengersInitials = {
adult: defaultAdult,
child: defaultChild,
infants: defaultInfants,
limit: 9,
total: 1
};
var initialDeparture = origin ? origin : choose_departure,
initialArrival = destination ? destination : choose_arrival;
var tripLocationsInitials = {
departure: {
cityName: origin,
cityCode: originIata,
cityIata: originIata,
countryName: "",
locString: initialDeparture
},
arrival: {
cityName: destination,
cityCode: destinationIata,
cityIata: destinationIata,
countryName: "",
locString: initialArrival
}
};
var datesConfig = {
departure: departureDate,
return: returnDate
};
var _useState = (0, _react.useState)(true),
_useState2 = _slicedToArray(_useState, 2),
isReturnTrip = _useState2[0],
setIsReturnTrip = _useState2[1];
var _useState3 = (0, _react.useState)(tripLocationsInitials),
_useState4 = _slicedToArray(_useState3, 2),
tripLocations = _useState4[0],
setTripLocations = _useState4[1];
var _useState5 = (0, _react.useState)(tripDatesInitials),
_useState6 = _slicedToArray(_useState5, 2),
tripDates = _useState6[0],
setTripDates = _useState6[1];
var _useState7 = (0, _react.useState)(tripPassengersInitials),
_useState8 = _slicedToArray(_useState7, 2),
tripPassengers = _useState8[0],
setTripPassenger = _useState8[1];
var _useState9 = (0, _react.useState)({
value: "Economy",
label: economy_label
}),
_useState10 = _slicedToArray(_useState9, 2),
tripClass = _useState10[0],
_setTripClass = _useState10[1];
var _useState11 = (0, _react.useState)(false),
_useState12 = _slicedToArray(_useState11, 2),
isValidDeparture = _useState12[0],
setIsValidDeparture = _useState12[1];
var _useState13 = (0, _react.useState)(false),
_useState14 = _slicedToArray(_useState13, 2),
isValidArrival = _useState14[0],
setIsValidArrival = _useState14[1];
var adult = tripPassengers.adult,
child = tripPassengers.child,
infants = tripPassengers.infants;
var _useState15 = (0, _react.useState)(datesConfig),
_useState16 = _slicedToArray(_useState15, 2),
selectedDates = _useState16[0],
setSelectedDates = _useState16[1];
var swapLocationHandler = function swapLocationHandler() {
if (tripLocations.departure.cityCode || tripLocations.arrival.cityCode) {
var departureText = tripLocations.departure.cityCode && !tripLocations.arrival.cityCode ? {
'locString': choose_departure
} : tripLocations.arrival;
var arrivalText = tripLocations.arrival.cityCode && !tripLocations.departure.cityCode ? {
'locString': choose_arrival
} : tripLocations.departure;
setTripLocations({
departure: departureText,
arrival: arrivalText
});
}
};
_react.default.useEffect(function () {
var storage_values;
if (!storage_values && page !== '/flightsFOTDPage') {
storage_values = JSON.parse(localStorage.getItem('FLIGHT_SEARCH_BOX_STATE'));
}
var tripDatesInitials = {
departureDate: storage_values ? storage_values.legs[0].departureDate : departureDate
};
var tripPassengersInitials = {
adult: storage_values ? storage_values.adults : defaultAdult,
child: storage_values ? storage_values.children : defaultChild,
infants: storage_values ? storage_values.infants : defaultInfants,
limit: 9,
total: 1
};
var tripLocationsInitials = {
departure: {
cityName: storage_values ? storage_values.legs[0].origin : origin,
cityCode: storage_values ? storage_values.legs[0].originIata : originIata,
cityIata: storage_values ? storage_values.legs[0].originIata : originIata,
countryName: "",
locString: storage_values && storage_values.legs[0].origin ? storage_values.legs[0].origin : initialDeparture
},
arrival: {
cityName: storage_values ? storage_values.legs[0].destination : destination,
cityCode: storage_values ? storage_values.legs[0].destinationIata : destinationIata,
cityIata: storage_values ? storage_values.legs[0].destinationIata : destinationIata,
countryName: "",
locString: storage_values && storage_values.legs[0].destination ? storage_values.legs[0].destination : initialArrival
}
};
var datesConfig = {
departure: storage_values ? storage_values.legs[0].departureDate : departureDate,
return: storage_values ? storage_values.legs[0].returnDate : returnDate
};
var searchType = storage_values && storage_values.searchType === 'oneway' ? false : true;
setTripLocations(tripLocationsInitials);
setSelectedDates(datesConfig);
setTripPassenger(tripPassengersInitials);
setTripDates(tripDatesInitials);
setIsReturnTrip(searchType);
_setTripClass({
value: storage_values ? storage_values.cabin : "Economy",
label: storage_values ? storage_values.cabin : economy_label
});
}, []);
_react.default.useEffect(function () {
var storage_values = JSON.parse(localStorage.getItem('FLIGHT_SEARCH_BOX_STATE'));
var flights = {};
flights.useDimmer = true;
flights.searchType = !isReturnTrip ? "oneway" : "roundtrip";
flights.legs = [{
origin: tripLocations.departure.cityName,
originIata: tripLocations.departure.cityIata,
destination: tripLocations.arrival.cityName,
destinationIata: tripLocations.arrival.cityIata,
nearbyOrigin: false,
nearbyDestination: false,
departureDate: (0, _moment.default)(isReturnTrip ? selectedDates.departure : tripDates.departureDate).format("YYYY-MM-DD"),
returnDate: isReturnTrip ? (0, _moment.default)(selectedDates.return).format("YYYY-MM-DD") : (0, _moment.default)(tripDates.departureDate).add(1, "Day").format("YYYY-MM-DD")
}];
flights.cabin = tripClass.value;
flights.infants = tripPassengers.infants;
flights.children = tripPassengers.child;
flights.adults = tripPassengers.adult;
flights.nonstop = false;
flights.showRememberFiltersCheckbox = false;
flights.rememberFilters = true;
flights.fareCalendar = false;
flights.isModifySearch = false;
flights.isDomesticView = false;
flights.isShazamSearch = true;
flights.showFareCalenderCheckBox = false;
flights.searching = false;
flights.showDimmer = false;
if (tripLocations.departure.cityIata) {
flights.nearbyOrigin = tripLocations.departure.cityIata;
}
if (tripLocations.arrival.cityIata) {
flights.nearbyDestination = tripLocations.arrival.cityIata;
}
if (selectedDates.return || tripDates.departureDate) {
flights.nearby = (0, _moment.default)(selectedDates.return).format("YYYY-MM-DD") || (0, _moment.default)(tripDates.departureDate).add(1, "Day").format("YYYY-MM-DD");
}
if (!storage_values || !(JSON.stringify(flights) === JSON.stringify(storage_values))) {
localStorage.setItem("FLIGHT_SEARCH_BOX_STATE", JSON.stringify(flights));
}
}, [selectedDates, tripDates, tripLocations, isReturnTrip, tripClass, tripPassengers]);
var locationHandler = function locationHandler(type, cityCode, cityName, cityIata, countryName, airportName) {
if (type === "departure") {
setIsValidDeparture(false);
setTripLocations({
departure: {
cityName: cityName,
cityCode: cityCode,
cityIata: cityIata,
countryName: countryName,
airportName: airportName,
locString: '[' + cityIata + '] ' + cityName + ', ' + countryName + ' - ' + airportName
},
arrival: {
cityName: tripLocations.arrival.cityName,
cityCode: tripLocations.arrival.cityCode,
cityIata: tripLocations.arrival.cityIata,
countryName: tripLocations.arrival.countryName,
airportName: tripLocations.arrival.airportName,
locString: tripLocations.arrival.cityIata ? '[' + tripLocations.arrival.cityIata + '] ' + tripLocations.arrival.cityName + ', ' + tripLocations.arrival.countryName + ' - ' + tripLocations.arrival.airportName : choose_arrival
}
});
} else {
setIsValidArrival(false);
setTripLocations({
departure: {
cityName: tripLocations.departure.cityName,
cityCode: tripLocations.departure.cityCode,
cityIata: tripLocations.departure.cityIata,
countryName: tripLocations.departure.countryName,
airportName: tripLocations.departure.airportName,
locString: tripLocations.departure.cityIata ? '[' + tripLocations.departure.cityIata + '] ' + tripLocations.departure.cityName + ', ' + tripLocations.departure.countryName + ' - ' + tripLocations.departure.airportName : choose_departure
},
arrival: {
cityName: cityName,
cityCode: cityCode,
cityIata: cityIata,
countryName: countryName,
airportName: airportName,
locString: '[' + cityIata + '] ' + cityName + ', ' + countryName + ' - ' + airportName
}
});
}
};
var passengerHandler = function passengerHandler(passengersList) {
setTripPassenger(passengersList);
};
var handleSubmit = function handleSubmit() {
var location = "".concat(tripLocations.departure.cityCode, "-").concat(tripLocations.arrival.cityCode, "/");
var departureDate = (0, _moment.default)(isReturnTrip ? selectedDates.departure : tripDates.departureDate).format("YYYY-MM-DD");
var returnDate = (0, _moment.default)(selectedDates.return).format("YYYY-MM-DD");
var tripDate = "".concat(departureDate).concat(isReturnTrip ? "/".concat(returnDate) : "");
var finalPassenger = "".concat(tripPassengers.adult, "Adult").concat(tripPassengers.child ? "/".concat(tripPassengers.child, "Child") : "").concat(tripPassengers.infants ? "/".concat(tripPassengers.infants, "Infant") : "");
if (!tripLocations.departure.cityCode) {
setIsValidDeparture(true);
return;
} else if (!tripLocations.arrival.cityCode) {
setIsValidArrival(true);
return;
}
window.location = "".concat(window.origin, "/").concat(lang, "/flights/").concat(location).concat(tripDate, "/").concat(tripClass.value, "/").concat(finalPassenger);
};
var topDestinations = "https://www.almosafer.com/api/cms/page";
var _useState17 = (0, _react.useState)([]),
_useState18 = _slicedToArray(_useState17, 2),
topDest = _useState18[0],
setTopDest = _useState18[1];
var _useState19 = (0, _react.useState)([]),
_useState20 = _slicedToArray(_useState19, 2),
relatedFromDest = _useState20[0],
setRelatedFromDest = _useState20[1];
var apiCall = function apiCall() {
_fare.FareClient.getTopAirports({
template: "top-airports-v2.json",
country: "general",
media: "mobile",
locale: lang + "_us"
}).then(function (res) {
setTopDest(res);
var dest = [];
res.forEach(function (item) {
dest[item.iata] = item.destinations;
});
setRelatedFromDest(dest);
});
};
return _react.default.createElement("div", {
className: "app ".concat(classes.app)
}, _react.default.createElement("div", {
className: classes.container
}, _react.default.createElement("div", {
className: classes.containerBtn
}, _react.default.createElement(_Button.default, {
className: "".concat(classes.primaryBtn, " ").concat(!isReturnTrip ? 'active' : ''),
variant: "contained",
color: "primary",
onClick: function onClick() {
return setIsReturnTrip(false);
}
}, one_way), _react.default.createElement(_Button.default, {
className: "".concat(classes.primaryBtn, " ").concat(isReturnTrip ? 'active' : ''),
variant: "contained",
color: "primary",
onClick: function onClick() {
return setIsReturnTrip(true);
}
}, round_trip))), _react.default.createElement("div", {
className: classes.container
}, _react.default.createElement(_ButtonField.default, {
brand: brand,
lang: lang,
label: from,
required: isValidDeparture,
value: tripLocations.departure.locString,
apiCall: apiCall,
type: "departure",
iconComponent: function iconComponent(props) {
return _react.default.createElement(_FlightTakeoff.default, props);
}
}, function (open, handleClose) {
return _react.default.createElement(_fields.LocationDialog, {
type: "departure",
open: open,
handleClose: handleClose,
locationHandler: locationHandler,
topDest: topDest,
lang: lang,
brand: brand,
isMobile: isMobile
});
})), _react.default.createElement("span", {
className: classes.containerArrowsIcon,
onClick: swapLocationHandler
}, _react.default.createElement(_SwapVert.default, {
className: classes.CompareArrowsIcon
})), _react.default.createElement("div", {
className: classes.container
}, _react.default.createElement(_ButtonField.default, {
brand: brand,
lang: lang,
label: to,
required: isValidArrival,
value: tripLocations.arrival.locString,
apiCall: apiCall,
type: "arrival",
iconComponent: function iconComponent(props) {
return _react.default.createElement(_FlightLand.default, props);
}
}, function (open, handleClose) {
return _react.default.createElement(_fields.LocationDialog, {
open: open,
handleClose: handleClose,
locationHandler: locationHandler,
topDest: topDest,
relatedFromDest: relatedFromDest,
from: tripLocations.departure.cityIata,
lang: lang,
brand: brand,
isMobile: isMobile
});
})), !isReturnTrip ? _react.default.createElement(_OneWayTripDateRangePicker.default, {
lang: lang,
brand: brand,
isMobile: isMobile,
defaultSelectedDates: selectedDates.departure,
onChange: function onChange(value) {
setTripDates({
departureDate: value,
returnDate: tripDates.returnDate
});
}
}) : _react.default.createElement(_ReturnTripDateRangePicker.default, {
lang: lang,
brand: brand,
isMobile: isMobile,
defaultSelectedDates: selectedDates,
onChange: setSelectedDates
}), _react.default.createElement("div", {
className: classes.container
}, _react.default.createElement(_ButtonField.default, {
brand: brand,
lang: lang,
iconComponent: function iconComponent(props) {
return _react.default.createElement(_SupervisorAccount.default, props);
},
s: true,
label: passengers,
value: "".concat(adult, " ").concat(adult_label).concat(child === 0 ? '' : ', ' + child + ' ' + child_value).concat(infants === 0 ? '' : ', ' + infants + ' ' + infants_label)
}, function (open, handleClose) {
return _react.default.createElement(_fields.PassengersDialog, {
defaultPassengers: tripPassengers,
open: open,
handleClose: handleClose,
passengerHandler: passengerHandler,
lang: lang,
brand: brand,
isMobile: isMobile
});
})), _react.default.createElement("div", {
className: classes.container
}, _react.default.createElement(_ButtonField.default, {
brand: brand,
lang: lang,
label: cabin_class,
value: tripClass.label,
iconComponent: function iconComponent(props) {
return _react.default.createElement(_AirlineSeatReclineExtra.default, props);
}
}, function (open, handleClose, anchorRef) {
return _react.default.createElement(_DropDown.default, {
open: open,
handleClose: handleClose,
setTripClass: function setTripClass(value, label) {
return _setTripClass(value, label);
},
anchorRef: anchorRef,
lang: lang,
brand: brand
});
})), _react.default.createElement("div", {
className: classes.wrapper
}, _react.default.createElement(_Button.default, {
classes: {
root: classes.button
},
variant: "contained",
color: "primary",
onClick: handleSubmit
}, search_flight)));
}
var _default = Flights;
exports.default = _default;