/* eslint-disable max-len */ import React from 'react'; import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux'; import { connect } from 'react-redux'; import { createSelector } from 'reselect'; import { Modal, Button, Col, Row } from '@freecodecamp/react-bootstrap'; import { Spacer } from '../helpers'; import { blockNameify } from '../../../../utils/block-nameify'; import Heart from '../../assets/icons/Heart'; import Cup from '../../assets/icons/Cup'; import MinimalDonateForm from './MinimalDonateForm'; import { modalDefaultStateConfig } from '../../../../config/donation-settings'; import { closeDonationModal, isDonationModalOpenSelector, isBlockDonationModalSelector, executeGA } from '../../redux'; import { challengeMetaSelector } from '../../templates/Challenges/redux'; import './Donation.css'; const mapStateToProps = createSelector( isDonationModalOpenSelector, challengeMetaSelector, isBlockDonationModalSelector, (show, { block }, isBlockDonation) => ({ show, block, isBlockDonation }) ); const mapDispatchToProps = dispatch => bindActionCreators( { closeDonationModal, executeGA }, dispatch ); const propTypes = { activeDonors: PropTypes.number, block: PropTypes.string, closeDonationModal: PropTypes.func.isRequired, executeGA: PropTypes.func, isBlockDonation: PropTypes.bool, show: PropTypes.bool }; function DonateModal({ show, block, isBlockDonation, closeDonationModal, executeGA }) { const [closeLabel, setCloseLabel] = React.useState(false); const handleProcessing = ( duration, amount, action = 'stripe form submission' ) => { executeGA({ type: 'event', data: { category: 'donation', action: `Modal ${action}`, label: duration, value: amount } }); setCloseLabel(true); }; if (show) { executeGA({ type: 'modal', data: '/donation-modal' }); executeGA({ type: 'event', data: { category: 'Donation', action: `Displayed ${ isBlockDonation ? 'block' : 'progress' } donation modal`, nonInteraction: true } }); } const durationToText = donationDuration => { if (donationDuration === 'onetime') return 'a one-time'; else if (donationDuration === 'month') return 'a monthly'; else if (donationDuration === 'year') return 'an annual'; else return 'a'; }; const donationText = ( Become {durationToText(modalDefaultStateConfig.donationDuration)}{' '} supporter of our nonprofit. ); const blockDonationText = (
{!closeLabel && ( Nicely done. You just completed {blockNameify(block)}.
{donationText} )}
); const progressDonationText = (
{!closeLabel && ( {donationText} )}
); return ( {isBlockDonation ? blockDonationText : progressDonationText} ); } DonateModal.displayName = 'DonateModal'; DonateModal.propTypes = propTypes; export default connect( mapStateToProps, mapDispatchToProps )(DonateModal);