Files
freeCodeCamp/client/src/components/Donation/DonationModal.js

128 lines
3.3 KiB
JavaScript
Raw Normal View History

/* 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';
2019-12-09 22:05:09 +01:00
import { Modal, Button, Col, Row } from '@freecodecamp/react-bootstrap';
2019-12-20 16:14:16 +05:30
import { Spacer } from '../helpers';
import { blockNameify } from '../../../utils/blockNameify';
import Heart from '../../assets/icons/Heart';
import Cup from '../../assets/icons/Cup';
2019-12-09 22:05:09 +01:00
import MinimalDonateForm from './MinimalDonateForm';
2019-12-20 16:14:16 +05:30
import ga from '../../analytics';
import {
closeDonationModal,
isDonationModalOpenSelector,
2019-12-09 22:05:09 +01:00
isBlockDonationModalSelector
2019-12-20 16:14:16 +05:30
} from '../../redux';
2019-12-20 16:14:16 +05:30
import { challengeMetaSelector } from '../../templates/Challenges/redux';
2019-12-20 16:14:16 +05:30
import './Donation.css';
const mapStateToProps = createSelector(
isDonationModalOpenSelector,
challengeMetaSelector,
isBlockDonationModalSelector,
2019-12-09 22:05:09 +01:00
(show, { block }, isBlockDonation) => ({
show,
block,
2019-12-09 22:05:09 +01:00
isBlockDonation
})
);
const mapDispatchToProps = dispatch =>
bindActionCreators(
{
closeDonationModal
},
dispatch
);
const propTypes = {
activeDonors: PropTypes.number,
block: PropTypes.string,
closeDonationModal: PropTypes.func.isRequired,
isBlockDonation: PropTypes.bool,
show: PropTypes.bool
};
2019-12-09 22:05:09 +01:00
function DonateModal({ show, block, isBlockDonation, closeDonationModal }) {
const [closeLabel, setCloseLabel] = React.useState(false);
const showCloseBtn = () => {
2019-12-09 22:05:09 +01:00
setCloseLabel(true);
};
if (show) {
ga.modalview('/donation-modal');
}
const blockDonationText = (
<div className='block-modal-text'>
<div className='donation-icon-container'>
<Cup className='donation-icon' />
</div>
2019-12-09 22:05:09 +01:00
<Row>
<Col sm={10} smOffset={1} xs={12}>
<p>Nicely done. You just completed {blockNameify(block)}.</p>
<p>Help us create even more learning resources like this.</p>
</Col>
</Row>
</div>
);
const progressDonationText = (
<div className='text-center progress-modal-text'>
<div className='donation-icon-container'>
<Heart className='donation-icon' />
</div>
2019-12-09 22:05:09 +01:00
<Row>
<Col sm={10} smOffset={1} xs={12}>
<p>
Help us create even more learning resources for you and your family.
</p>
</Col>
</Row>
</div>
);
return (
<Modal bsSize='lg' className='donation-modal' show={show}>
<Modal.Header className='fcc-modal'>
<Modal.Title className='modal-title text-center'>
2019-12-09 22:05:09 +01:00
<strong>Become a Supporter</strong>
</Modal.Title>
</Modal.Header>
<Modal.Body>
{isBlockDonation ? blockDonationText : progressDonationText}
2019-12-09 22:05:09 +01:00
<Spacer />
<MinimalDonateForm showCloseBtn={showCloseBtn} />
2019-12-09 22:05:09 +01:00
<Spacer />
<Row>
<Col sm={10} smOffset={1} xs={12}>
<Button
block={true}
bsSize='sm'
bsStyle='primary'
className='btn-link'
onClick={closeDonationModal}
tabIndex='0'
2019-12-09 22:05:09 +01:00
>
{closeLabel ? 'Close.' : 'Ask me later.'}
2019-12-09 22:05:09 +01:00
</Button>
</Col>
</Row>
</Modal.Body>
</Modal>
);
}
DonateModal.displayName = 'DonateModal';
DonateModal.propTypes = propTypes;
export default connect(
mapStateToProps,
mapDispatchToProps
)(DonateModal);