@xiag-stc/react-basket
Version:
Order basket view: period of stay blocks containing the hotel blocks containing the room blocks; guest data forms with variations for Airline- and Airport-TO-s
129 lines (110 loc) • 4.83 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactIntl = require('react-intl');
var _reactGuestDataForm = require('@xiag-stc/react-guest-data-form');
var _ratePlan = require('@stc-b2b/rate-plan');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _react2.default.createClass({
displayName: 'GuestDataContainer',
mixins: [_reactIntl.IntlMixin],
propTypes: {
tourOperatorType: _react2.default.PropTypes.string.isRequired,
hotelId: _react2.default.PropTypes.string.isRequired,
room: _react2.default.PropTypes.shape({
uniqueToken: _react2.default.PropTypes.string.isRequired,
guestData: _react2.default.PropTypes.object.isRequired,
showGuestData: _react2.default.PropTypes.bool.isRequired
}).isRequired,
showRegisterForPickUp: _react2.default.PropTypes.bool,
onOpenGuestData: _react2.default.PropTypes.func.isRequired,
onCloseGuestData: _react2.default.PropTypes.func.isRequired,
saveGuestData: _react2.default.PropTypes.func.isRequired,
saveGuestDataForAllRooms: _react2.default.PropTypes.func.isRequired
},
render: function render() {
return _react2.default.createElement(
'tr',
null,
_react2.default.createElement(
'td',
{ className: 'guestContainer', colSpan: '100' },
_react2.default.createElement(
'div',
null,
_react2.default.createElement(
'button',
{
type: 'button',
className: this.buttonCssClass(),
onClick: this.handleToggle },
_react2.default.createElement(_reactIntl.FormattedMessage, {
message: this.getIntlMessage('react-basket.room.clientDetails') }),
' ',
_react2.default.createElement('span', { className: 'glyphicon glyphicon-' + this.buttonGlyphIcon() })
),
' ',
_react2.default.createElement(
'span',
{ className: 'lead-guest-name' },
this.leadGuestName()
),
' ',
this.mealsInfo()
),
this.form()
)
);
},
buttonCssClass: function buttonCssClass() {
var validate = (0, _reactGuestDataForm.validator)(this.props.tourOperatorType);
return 'toggle-guest-data btn ' + (validate(this.props.room.guestData) ? 'btn-default' : 'btn-primary');
},
buttonGlyphIcon: function buttonGlyphIcon() {
return this.props.room.showGuestData ? 'menu-up' : 'menu-down';
},
leadGuestName: function leadGuestName() {
var _props$room$guestData = this.props.room.guestData.guests[0],
firstName = _props$room$guestData.firstName,
lastName = _props$room$guestData.lastName;
return firstName + ' ' + lastName;
},
mealsInfo: function mealsInfo() {
if (!this.props.room.guestData.mealsPerPerson) {
return null;
}
var content = this.props.room.guestData.mealsPerPerson + ' x ' + {
'20.00': 'Y CHF 20.00',
'30.00': 'C/F CHF 30.00'
}[this.props.room.guestData.mealPriceChf];
return _react2.default.createElement(
'span',
{ className: 'meals-info' },
content
);
},
form: function form() {
var GuestDataForm = (0, _reactGuestDataForm.klass)(this.props.tourOperatorType);
return this.props.room.showGuestData ? _react2.default.createElement(GuestDataForm, {
ref: 'form',
uniqueRoomToken: this.props.room.uniqueToken,
isHotelShuttleAvailable: (0, _ratePlan.isHotelShuttleAvailable)(this.props.hotelId),
showRegisterForPickUp: this.props.showRegisterForPickUp,
guestData: this.props.room.guestData,
save: this.handleSave,
saveForAll: this.props.saveGuestDataForAllRooms }) : null;
},
handleToggle: function handleToggle() {
if (this.props.room.showGuestData) {
this.props.onCloseGuestData(this.props.room.uniqueToken);
} else {
this.props.onOpenGuestData(this.props.room.uniqueToken);
}
},
handleSave: function handleSave(values) {
this.props.saveGuestData(this.props.room.uniqueToken, values);
}
});