UNPKG

alm-search-01

Version:

This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).

707 lines (620 loc) 24.7 kB
"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 _styles = require("@material-ui/core/styles"); var _List = _interopRequireDefault(require("@material-ui/core/List")); var _Grid = _interopRequireDefault(require("@material-ui/core/Grid")); var _ListItemIcon = _interopRequireDefault(require("@material-ui/core/ListItemIcon")); var _ListItem = _interopRequireDefault(require("@material-ui/core/ListItem")); var _ListItemText = _interopRequireDefault(require("@material-ui/core/ListItemText")); var _Divider = _interopRequireDefault(require("@material-ui/core/Divider")); var _SupervisorAccount = _interopRequireDefault(require("@material-ui/icons/SupervisorAccount")); var _HotelRounded = _interopRequireDefault(require("@material-ui/icons/HotelRounded")); var _Field = _interopRequireDefault(require("../components/Field/Field")); var _Counter = _interopRequireDefault(require("../components/Counter")); var _Dialog = _interopRequireDefault(require("../components/Dialog")); var _core = require("@material-ui/core"); var _AddCircleRounded = _interopRequireDefault(require("@material-ui/icons/AddCircleRounded")); var _getHotelsLocale2 = _interopRequireDefault(require("../utils/getHotelsLocale")); var _brandStyles = _interopRequireDefault(require("../utils/brandStyles")); var _AgeDropDown = _interopRequireDefault(require("../components/DropDown/AgeDropDown")); 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 _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } 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; } function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } var useStyles = (0, _styles.makeStyles)(function (theme) { return { container: { display: 'flex', width: '100%', margin: '4px 0' }, list: { boxShadow: '0 1px 8px 0 rgba(0, 0, 0, 0.1)', margin: theme.spacing(2, 1, 1), padding: theme.spacing(0) }, listItem: { background: 'transparent' }, roomsWarningTitle: { textAlign: 'center' }, btnColor: { color: function color(getBrandStyles) { return getBrandStyles.color; }, padding: 0 }, infoColor: { // color: '#02647A', paddingRight: theme.spacing(2), paddingLeft: theme.spacing(2), fontWeight: 500, fontSize: 18, color: 'rgba(0, 0, 0, 0.87)' }, infoSecondary: { color: '#97a1a6', fontWeight: 'normal', fontSize: 12 }, infoPrimary: { fontWeight: 'normal', fontSize: 18 }, iconColor: { color: '#97a1a6' }, btnRemove: { marginTop: 0, marginBottom: 6 }, btnPrimary: { textTransform: 'uppercase', fontWeight: 'normal', fontSize: 14, color: function color(getBrandStyles) { return getBrandStyles.colorTwo; } }, addBtn: { color: function color(getBrandStyles) { return getBrandStyles.colorTwo; }, paddingRight: theme.spacing(1), paddingLeft: theme.spacing(1), textTransform: 'uppercase', fontWeight: '500', fontSize: 14 }, ListItemIcon: { minWidth: 'inherit' }, AddCircleRoundedIcon: { color: function color(getBrandStyles) { return getBrandStyles.colorTwo; } }, icon: { paddingRight: theme.spacing(1), paddingLeft: theme.spacing(1) }, listItemContainer: { margin: '0 -5px' }, ageContainer: { fontSize: 14, fontWeight: 500, fontFamily: '"Roboto", Helvetica, Arial, sans-serif', fontStretch: 'normal', fontStyle: 'normal' }, ageSelect: { display: 'contents', marginBottom: 10 }, //Use For only RTL infoRtl: { textAlign: 'right' } }; }); var defaultState = { room: [{ guest: [{ type: 'ADT' }, { type: 'CHD', age: 1 }] }] }; var reducer = function reducer(state, action) { var room = state.room; switch (action.type) { case 'addRooms': { var newRoom = _toConsumableArray(room); if (newRoom.length < 4) { newRoom = [].concat(_toConsumableArray(room), [{ guest: [{ id: 1, type: 'ADT' }, { id: 2, type: 'ADT' }] }]); } return _objectSpread({}, state, { room: newRoom }); } case 'removeRooms': { var roomId = action.payload.roomId; var newState = Object.assign({}, state); var _newRoom = newState.room; var updatedRoom = _toConsumableArray(_newRoom); if (_newRoom.length > 1) { _newRoom.splice(roomId, 1); updatedRoom = _toConsumableArray(_newRoom); } return _objectSpread({}, state, { room: updatedRoom }); } case 'addGuests': { var _action$payload = action.payload, guestType = _action$payload.guestType, _roomId = _action$payload.roomId, _action$payload$age = _action$payload.age, age = _action$payload$age === void 0 ? 0 : _action$payload$age; var maxGuestsPerRoom = 8; if (guestType === 'adult') { var roomObj = room[_roomId]; var totalGuests = roomObj['guest'].length; var lastID = roomObj['guest'][roomObj['guest'].length - 1].id; var guestObj = { id: lastID + 1, type: 'ADT' }; if (totalGuests < maxGuestsPerRoom) { if (roomObj['guest'] && Array.isArray(roomObj['guest'])) { roomObj['guest'].push(guestObj); } else { roomObj['guest'] = []; roomObj['guest'].push(guestObj); } } room[_roomId] = roomObj; return _objectSpread({}, state, { room: room }); } else { var _roomObj = room[_roomId]; var _totalGuests = _roomObj['guest'].length; var _lastID = _roomObj['guest'][_roomObj['guest'].length - 1].id; var childObj = { id: _lastID + 1, type: 'CHD', age: age }; if (_totalGuests < maxGuestsPerRoom) { if (_roomObj['guest'] && Array.isArray(_roomObj['guest'])) { _roomObj['guest'].push(childObj); } else { _roomObj['guest'] = []; _roomObj['guest'].push(childObj); } } room[_roomId] = _roomObj; return _objectSpread({}, state, { room: room }); } } case 'removeGuests': { var _action$payload2 = action.payload, _guestType = _action$payload2.guestType, _roomId2 = _action$payload2.roomId; if (_guestType === 'adult') { var _roomObj2 = room[_roomId2]; var guestArr = _roomObj2['guest']; var newGuestArr = _toConsumableArray(guestArr); var adultIndex = newGuestArr.findIndex(function (guestItem) { return guestItem.type === 'ADT'; }); var allAdults = newGuestArr.filter(function (guestItem) { return guestItem.type === 'ADT'; }); if (allAdults.length > 1) { newGuestArr.splice(adultIndex, 1); } room[_roomId2] = { guest: newGuestArr }; return _objectSpread({}, state, { room: room }); } else { var _roomObj3 = room[_roomId2]; var _guestArr = _roomObj3['guest']; var _newGuestArr = _toConsumableArray(_guestArr); var _adultIndex = _newGuestArr.reverse().findIndex(function (guestItem) { return guestItem.type === 'CHD'; }); var _allAdults = _newGuestArr.filter(function (guestItem) { return guestItem.type === 'CHD'; }); if (_allAdults.length > 0) { _newGuestArr.splice(_adultIndex, 1); _newGuestArr.reverse(); } room[_roomId2] = { guest: _newGuestArr }; return _objectSpread({}, state, { room: room }); } } case 'totalGuests': { var rooms = []; room.forEach(function (guestObj) { rooms.concat(guestObj['guest']); }); var adults = rooms.filter(function (guestItem) { return guestItem.type === 'ADT'; }); var children = rooms.filter(function (guestItem) { return guestItem.type === 'CHD'; }); return _objectSpread({}, state, { total: adults.length + children.length }); } case 'updateAge': { var _action$payload3 = action.payload, _guestType2 = _action$payload3.guestType, _roomId3 = _action$payload3.roomId, childrenId = _action$payload3.childrenId, _age = _action$payload3.age; var _roomObj4 = room[_roomId3]; var _guestArr2 = _roomObj4['guest']; var childItem = _guestArr2.find(function (guestItem) { return guestItem.id === childrenId; }); var childItemIndex = _guestArr2.find(function (guestItem) { return guestItem.id === childrenId; }); childItem.age = _age; _guestArr2.splice(childItemIndex, childItem); room[_roomId3] = { guest: _guestArr2 }; return _objectSpread({}, state, { room: room }); } default: return _objectSpread({}, state); } }; var GuestsPicker = function GuestsPicker(_ref) { var onChange = _ref.onChange, _ref$defaultGuests = _ref.defaultGuests, defaultGuests = _ref$defaultGuests === void 0 ? defaultState : _ref$defaultGuests, lang = _ref.lang, isMobile = _ref.isMobile, brand = _ref.brand; var _getHotelsLocale = (0, _getHotelsLocale2.default)(lang), guest_picker_guests_label = _getHotelsLocale.guest_picker_guests_label, guest_picker_rooms_label = _getHotelsLocale.guest_picker_rooms_label, guest_picker_adults_label = _getHotelsLocale.guest_picker_adults_label, guest_picker_children_label = _getHotelsLocale.guest_picker_children_label, guest_picker_room_title_label = _getHotelsLocale.guest_picker_room_title_label, guest_picker_max_room_label = _getHotelsLocale.guest_picker_max_room_label, guest_picker_adults_sub_label = _getHotelsLocale.guest_picker_adults_sub_label, guest_picker_children_sub_label = _getHotelsLocale.guest_picker_children_sub_label, guest_picker_add_room_label = _getHotelsLocale.guest_picker_add_room_label, guest_picker_remove_label = _getHotelsLocale.guest_picker_remove_label, guest_picker_children_age_label = _getHotelsLocale.guest_picker_children_age_label, guest_picker_children_age_sub_label = _getHotelsLocale.guest_picker_children_age_sub_label, under_label = _getHotelsLocale.under_label; var classes = useStyles((0, _brandStyles.default)(brand)); var _useReducer = (0, _react.useReducer)(reducer, defaultGuests), _useReducer2 = _slicedToArray(_useReducer, 2), state = _useReducer2[0], dispatch = _useReducer2[1]; var room = state.room; var stateManageHandler = function stateManageHandler(_ref2) { var actionType = _ref2.actionType, payload = _ref2.payload; dispatch({ type: actionType, payload: payload }); dispatch({ type: 'totalGuests' }); }; var _React$useState = _react.default.useState(false), _React$useState2 = _slicedToArray(_React$useState, 2), open = _React$useState2[0], setOpen = _React$useState2[1]; var handleDropdownOpen = function handleDropdownOpen() { setOpen(true); }; var handleDropdownClose = function handleDropdownClose() { setOpen(false); }; var handleSubmit = function handleSubmit() { onChange({ room: room }); handleDropdownClose(); }; var handleAgeChange = function handleAgeChange(roomId, childrenItem, newAge) { stateManageHandler({ actionType: 'updateAge', payload: { guestType: 'children', roomId: roomId, childrenId: childrenItem.id, age: newAge } }); }; var guestsArr = []; room.forEach(function (guestObj) { guestsArr = guestsArr.concat(guestObj['guest']); }); var adultsArr = guestsArr.filter(function (guestItem) { return guestItem.type === 'ADT'; }); var childrenArr = guestsArr.filter(function (guestItem) { return guestItem.type === 'CHD'; }); var totalRooms = room.length; var totalAdults = adultsArr.length; var totalChildren = childrenArr.length; var guestsLabel = ["".concat(totalRooms, " ").concat(guest_picker_rooms_label), "".concat(totalAdults, " ").concat(guest_picker_adults_label), "".concat(totalChildren, " ").concat(guest_picker_children_label)].join(', '); var RoomListItem = function RoomListItem(_ref3) { var guest = _ref3.guest, roomId = _ref3.roomId, rooms = _ref3.rooms; var guestItemAdults = guest.filter(function (guestItem) { return guestItem.type === 'ADT'; }); var guestItemChildren = guest.filter(function (guestItem) { return guestItem.type === 'CHD'; }); var totalAdultsInRoom = guestItemAdults.length; var totalChildrenInRoom = guestItemChildren.length; var totalGuestsInRoom = totalAdultsInRoom + totalChildrenInRoom; var ar = 'ar'; return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_ListItem.default, { classes: { root: classes.listItem } }, _react.default.createElement(_HotelRounded.default, { classes: { root: classes.iconColor } }), _react.default.createElement(_ListItemText.default, { classes: { root: lang === ar && classes.infoRtl, primary: classes.infoColor }, primary: "".concat(guest_picker_room_title_label, " ").concat(roomId + 1) }), rooms.length > 1 ? _react.default.createElement(_ListItemIcon.default, null, _react.default.createElement(_core.IconButton, { classes: { root: classes.btnColor }, onClick: function onClick() { return stateManageHandler({ actionType: 'removeRooms', payload: { guestType: 'room', roomId: roomId } }); } }, _react.default.createElement(_ListItemText.default, { primary: guest_picker_remove_label, classes: { root: classes.btnRemove, primary: classes.btnPrimary } }))) : null), _react.default.createElement(_Divider.default, null), _react.default.createElement(_ListItem.default, { classes: { root: classes.listItem } }, _react.default.createElement(_ListItemText.default, { primary: guest_picker_adults_label, secondary: guest_picker_adults_sub_label, classes: { root: lang === ar && classes.infoRtl, primary: classes.infoPrimary, secondary: classes.infoSecondary } }), _react.default.createElement(_ListItemIcon.default, null, _react.default.createElement(_Counter.default, { count: totalAdultsInRoom, isMinDisabled: totalAdultsInRoom <= 1, isMaxDisabled: totalGuestsInRoom >= 8, brand: brand, onAdd: function onAdd() { return stateManageHandler({ actionType: 'addGuests', payload: { guestType: 'adult', roomId: roomId } }); }, onRemove: function onRemove() { return stateManageHandler({ actionType: 'removeGuests', payload: { guestType: 'adult', roomId: roomId } }); } }))), _react.default.createElement(_Divider.default, null), _react.default.createElement(_ListItem.default, { classes: { root: classes.listItem } }, _react.default.createElement(_ListItemText.default, { primary: guest_picker_children_label, secondary: guest_picker_children_sub_label, classes: { root: lang === ar && classes.infoRtl, primary: classes.infoPrimary, secondary: classes.infoSecondary } }), _react.default.createElement(_ListItemIcon.default, null, _react.default.createElement(_Counter.default, { count: totalChildrenInRoom, isMinDisabled: totalChildrenInRoom <= 0, isMaxDisabled: totalGuestsInRoom >= 8, brand: brand, onAdd: function onAdd() { return stateManageHandler({ actionType: 'addGuests', payload: { guestType: 'children', roomId: roomId } }); }, onRemove: function onRemove() { return stateManageHandler({ actionType: 'removeGuests', payload: { guestType: 'children', roomId: roomId } }); } }))), guestItemChildren && guestItemChildren.length > 0 && _react.default.createElement(_ListItem.default, { classes: { root: classes.listItem } }, _react.default.createElement("div", { className: classes.ageContainer }, guest_picker_children_age_label)), _react.default.createElement(_ListItem.default, { classes: { root: classes.listItem } }, _react.default.createElement(_Grid.default, { container: true, classes: { root: "".concat(classes.listItemContainer, " ").concat(lang === ar && classes.infoRtl) } }, guestItemChildren.map(function (childrenItem, idx) { return _react.default.createElement(_react.default.Fragment, { key: idx }, _react.default.createElement(_Grid.default, { classes: { root: classes.ageSelect } }, _react.default.createElement(_AgeDropDown.default, { lang: lang, handleAgeChange: handleAgeChange, childrenItem: childrenItem, roomId: roomId, value: childrenItem.age }))); }))), _react.default.createElement(_Divider.default, null), roomId === rooms.length - 1 && rooms.length < 4 ? _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_ListItem.default, { classes: { root: classes.primaryColor }, button: true, onClick: function onClick() { return stateManageHandler({ actionType: 'addRooms', payload: { guestType: 'room' } }); } }, _react.default.createElement(_ListItemIcon.default, { classes: { root: classes.ListItemIcon } }, _react.default.createElement(_AddCircleRounded.default, { classes: { root: classes.AddCircleRoundedIcon } })), _react.default.createElement(_ListItemText.default, { classes: { root: lang === ar && classes.infoRtl, primary: classes.addBtn }, primary: guest_picker_add_room_label }))) : null); }; return _react.default.createElement("div", { className: classes.container }, _react.default.createElement(_Field.default, { label: guest_picker_guests_label, value: guestsLabel, iconComponent: function iconComponent(props) { return _react.default.createElement(_SupervisorAccount.default, props); }, onClick: handleDropdownOpen, brand: brand, lang: lang }), _react.default.createElement(_Dialog.default, { disableEnforceFocus: true, title: guest_picker_guests_label, isOpen: open, onOkClick: handleSubmit, onClose: handleDropdownClose, brand: brand, isMobile: isMobile, lang: lang }, _react.default.createElement(_List.default, { classes: { root: classes.list } }, _react.default.createElement(_ListItem.default, { classes: { root: classes.roomsWarningTitle } }, _react.default.createElement(_ListItemText.default, { classes: { primary: classes.addBtn }, secondary: guest_picker_max_room_label })), _react.default.createElement(_Divider.default, null), room.map(function (roomItem, idx, rooms) { return _react.default.createElement(RoomListItem, _extends({}, roomItem, { rooms: rooms, key: idx, roomId: idx })); })))); }; var _default = GuestsPicker; exports.default = _default;