@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
187 lines (163 loc) • 7.6 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactIntl = require('react-intl');
var _ratePlan = require('@stc-b2b/rate-plan');
var _RoomOccupancy = require('./RoomOccupancy');
var _RoomOccupancy2 = _interopRequireDefault(_RoomOccupancy);
var _RatePlanIcon = require('./RatePlanIcon');
var _RatePlanIcon2 = _interopRequireDefault(_RatePlanIcon);
var _roomCost = require('./roomCost');
var _roomCost2 = _interopRequireDefault(_roomCost);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function costShape() {
return _react.PropTypes.shape({
currency: _react.PropTypes.string.isRequired,
amount: _react.PropTypes.string.isRequired
});
}
exports.default = _react2.default.createClass({
displayName: 'Room',
mixins: [_reactIntl.IntlMixin],
propTypes: {
room: _react.PropTypes.shape({
roomType: _react.PropTypes.shape({
code: _react.PropTypes.string.isRequired,
shortDescriptionLocalized: _react.PropTypes.string.isRequired,
longDescriptionLocalized: _react.PropTypes.string.isRequired,
amenityDescriptionsLocalized: _react.PropTypes.arrayOf(_react.PropTypes.string).isRequired,
bedTypeCode: _react.PropTypes.string.isRequired,
occupancyConstraints: _react.PropTypes.object.isRequired
}).isRequired,
ratePlan: _react.PropTypes.shape({
mealPlanCode: _react.PropTypes.string.isRequired,
occupancyTotals: _react.PropTypes.arrayOf(_react.PropTypes.shape({
occupancyCode: _react.PropTypes.string.isRequired,
cost: costShape()
})).isRequired,
cancellationDeadline: _react.PropTypes.object.isRequired,
excludedTaxes: _react.PropTypes.arrayOf(_react.PropTypes.shape({
code: _react.PropTypes.number.isRequired,
chargeUnitCode: _react.PropTypes.number.isRequired,
cost: costShape()
}))
}),
occupancyRoomCounts: _react.PropTypes.object.isRequired,
uniqueToken: _react.PropTypes.string.isRequired
}).isRequired,
onOccupancyChange: _react.PropTypes.func.isRequired,
onRemove: _react.PropTypes.func.isRequired,
restoreRoomInAvailableHotels: _react.PropTypes.func.isRequired
},
render: function render() {
return _react2.default.createElement(
'tr',
{ className: 'basket-room' },
_react2.default.createElement(
'td',
{ className: 'rooms-columns-room-type' },
_react2.default.createElement(
'a',
{ href: 'javascript:;', title: '', className: 'mode-popup' },
_react2.default.createElement('span', { className: 'glyphicon glyphicon-info-sign' }),
_react2.default.createElement(
'div',
{ className: 'mode-popup__info' },
_react2.default.createElement(
'p',
{ className: 'room-type-description' },
this.props.room.roomType.longDescriptionLocalized
),
_react2.default.createElement(
'p',
{ className: 'room-bed-type' },
_react2.default.createElement(_reactIntl.FormattedMessage, {
message: this.getIntlMessage('react-basket.room.bedType') }),
': ',
_react2.default.createElement(_reactIntl.FormattedMessage, {
message: this.getIntlMessage('react-available-hotels.bedType'),
type: this.props.room.roomType.bedTypeCode })
),
_react2.default.createElement(
'ul',
null,
this.amenities()
)
)
),
' ',
this.props.room.roomType.shortDescriptionLocalized,
' (',
this.props.room.roomType.code,
')'
),
_react2.default.createElement(
'td',
{ className: 'rooms-columns-meals' },
_react2.default.createElement(_reactIntl.FormattedMessage, {
message: this.getIntlMessage('react-available-hotels.mealPlan'),
code: this.props.room.ratePlan.mealPlanCode })
),
_react2.default.createElement(
'td',
{ className: 'rooms-columns-occupancy' },
_react2.default.createElement(_RoomOccupancy2.default, {
ref: 'occupancy',
occupancyConstraints: this.props.room.roomType.occupancyConstraints,
occupancyRoomCounts: this.props.room.occupancyRoomCounts,
onChange: this.handleOccupancyChange })
),
_react2.default.createElement(
'td',
{ className: 'rooms-columns-total__currency' },
(0, _roomCost2.default)(this.props.room).currency
),
_react2.default.createElement(
'td',
{ className: 'rooms-columns-total__price' },
(0, _roomCost2.default)(this.props.room).amount
),
_react2.default.createElement(
'td',
{ className: 'rooms-columns-rate-plan-icon' },
_react2.default.createElement(_RatePlanIcon2.default, { ref: 'ratePlan', ratePlan: this.props.room.ratePlan })
),
_react2.default.createElement(
'td',
{ className: 'rooms-columns-cancellation-policy' },
(0, _ratePlan.cancellationDeadlineText)(this.getIntlMessage('react-basket.room.nonRefundableRate'), this.props.room.ratePlan)
),
_react2.default.createElement(
'td',
{ className: 'rooms-columns-control' },
_react2.default.createElement(
'a',
{
className: 'btn btn-default',
href: 'javascript:;',
onClick: this.handleRemove },
_react2.default.createElement('span', { className: 'glyphicon glyphicon-remove' })
)
)
);
},
amenities: function amenities() {
return this.props.room.roomType.amenityDescriptionsLocalized.map(function (a, i) {
return _react2.default.createElement(
'li',
{ key: 'a' + i },
a
);
});
},
handleOccupancyChange: function handleOccupancyChange(occupancyRoomCountsChange) {
this.props.onOccupancyChange(this.props.room.uniqueToken, occupancyRoomCountsChange);
},
handleRemove: function handleRemove() {
this.props.restoreRoomInAvailableHotels(this.props.room.uniqueToken);
this.props.onRemove(this.props.room.uniqueToken);
}
});