/React/enterprise-web/src/js/components/CarSelect/CarModals.js

https://bitbucket.org/chrisgfortes/code-portfolio · JavaScript · 166 lines · 148 code · 14 blank · 4 comment · 11 complexity · 8a6c8f79385542f5dc241a265a865613 MD5 · raw file

  1. import ReservationCursors from '../../cursors/ReservationCursors';
  2. import { branch as BaobabReactMixinBranch } from 'baobab-react/mixins';
  3. import DomManager from '../../modules/outerDomManager';
  4. import { whenVehicleIsSelected,
  5. vanModalControls,
  6. limitedVehicleModalControls,
  7. pointsToggle,
  8. redemptionModalControls,
  9. onConfirmingInNotAvailableModal } from '../../controllers/CarSelectController';
  10. import GlobalModal from '../Modal/GlobalModal';
  11. import LimitedVehicleModal from '../Modal/LimitedVehicleModal';
  12. import ConfirmationModalContent from '../Modify/ConfirmationModalContent';
  13. import TaxesAndFeesModalContent from './TaxesAndFeesModalContent';
  14. import VanModalContent from './VanModalContent';
  15. import CorporateModals from '../Corporate/ActionModals';
  16. import RedemptionModal from './RedemptionModal';
  17. import NotAvailableModal from './NotAvailableModal';
  18. import VehiclePriceModal from './VehiclePriceModal.js';
  19. import RateComparisonModalContent from './RateComparisonModalContent';
  20. const CarModals = React.createClass({
  21. mixins: [
  22. BaobabReactMixinBranch,
  23. React.addons.PureRenderMixin
  24. ],
  25. cursors: {
  26. inflightModifyModal: ReservationCursors.inflightModifyModal,
  27. carSelect: ReservationCursors.viewCarSelect,
  28. preSelectedVehicle: ReservationCursors.preSelectedVehicle,
  29. selectedCar: ReservationCursors.selectedCar,
  30. basicProfileLoyalty: ReservationCursors.basicProfileLoyalty,
  31. redemption: ReservationCursors.redemption,
  32. isModify: ReservationCursors.modify,
  33. chargeType: ReservationCursors.chargeType,
  34. filteredCars: ReservationCursors.filteredVehicles,
  35. carRateCompare: ReservationCursors.carRateCompare
  36. },
  37. render () {
  38. const {carSelect, inflightModifyModal, preSelectedVehicle, selectedCar, basicProfileLoyalty, redemption, isModify, chargeType, filteredCars, carRateCompare} = this.state;
  39. const {hasNoVehiclesForCoupon} = this.props;
  40. const isRequestModalVehicle = _.get(carSelect, 'requestModal.modal') &&
  41. _.get(carSelect, 'requestModal.origin') === 'vehicle';
  42. DomManager.trigger('toggleInflightModal', inflightModifyModal);
  43. return (
  44. <div>
  45. {inflightModifyModal && (
  46. <GlobalModal
  47. header={i18n('resflowreview_0098')}
  48. contentHeader={i18n('resflowreview_0098')}
  49. contentText={i18n('resflowviewmodifycancel_2007')}
  50. cursor={ReservationCursors.inflightModifyModal}
  51. content={
  52. <ConfirmationModalContent
  53. confirm={whenVehicleIsSelected}
  54. />
  55. }
  56. />
  57. )}
  58. {_.get(carSelect, 'taxesAndFees.modal') && (
  59. <GlobalModal
  60. header={i18n('reservationnav_0019')}
  61. cursor={ReservationCursors.taxesAndFeesModal}
  62. content={
  63. <TaxesAndFeesModalContent
  64. car={filteredCars.find(c => c.code === carSelect.detailsCar)}
  65. />
  66. }
  67. />
  68. )}
  69. {_.get(carSelect, 'vanModal.modal') && (
  70. <GlobalModal
  71. header={i18n('resflowcarselect_0098')}
  72. cursor={ReservationCursors.vanModalControl}
  73. content={
  74. <VanModalContent
  75. description={_.get(carSelect, 'vanModal.description')}
  76. controlsModal={vanModalControls}
  77. />
  78. }
  79. />
  80. )}
  81. {isRequestModalVehicle && (
  82. <GlobalModal
  83. header={i18n('resflowcarselect_0150') || 'Limited Vehicle Selected'}
  84. classLabel="Limited-Vehicle-Modal"
  85. cursor={ReservationCursors.requestModalModal}
  86. content={
  87. <LimitedVehicleModal controlsModal={limitedVehicleModalControls}/>
  88. }
  89. />
  90. )}
  91. {/*
  92. Take into account that this cursor is set by `CarSelectController.whenRedemptionVehicleIsSelected`
  93. and that this method is called either when clicking on a _Car's Select Button_ or
  94. when getting into #cars step (under special conditions).
  95. Check `routeRules.cars` on `reservation.js` for more details.
  96. */}
  97. {_.get(carSelect, 'redemption.modal') && (
  98. <GlobalModal
  99. hideX
  100. header={i18n('resflowcarselect_0007')}
  101. cursor={ReservationCursors.redemptionModal}
  102. classLabel="redemption-modal-container"
  103. content={
  104. <RedemptionModal {...{
  105. selectDaysControl: pointsToggle.createControls(),
  106. modalControls: redemptionModalControls,
  107. selectedCar,
  108. basicProfileLoyalty,
  109. redemption
  110. }}/>
  111. }
  112. />
  113. )}
  114. {_.get(carSelect, 'rateComparison.modal') && (
  115. <GlobalModal
  116. header={i18n('prepay_0015') || 'RATE INFORMATION'}
  117. classLabel="rate-comparison-modal"
  118. cursor={ReservationCursors.rateComparisonModal}
  119. content={
  120. <RateComparisonModalContent car={carRateCompare}/>
  121. }
  122. />
  123. )}
  124. {_.get(carSelect, 'vehiclePriceModal.modal') && (
  125. <GlobalModal
  126. header={i18n('MVT_0005')}
  127. cursor={ReservationCursors.vehiclePriceModalControls}
  128. classLabel="vehicle-price-modal"
  129. content={
  130. <VehiclePriceModal {...{
  131. car: preSelectedVehicle,
  132. selectedChargeType: chargeType,
  133. isModify
  134. }}/>
  135. }
  136. />
  137. )}
  138. {hasNoVehiclesForCoupon && carSelect.notAvailable.modal && (
  139. <GlobalModal
  140. header="&nbsp;"
  141. cursor={ReservationCursors.notAvailableModal}
  142. content={
  143. <NotAvailableModal confirm={onConfirmingInNotAvailableModal}/>
  144. }
  145. />
  146. )}
  147. <CorporateModals />
  148. </div>
  149. );
  150. }
  151. });
  152. export default CarModals;