Files
freeCodeCamp/client/src/templates/Challenges/components/Preview.js

63 lines
1.3 KiB
JavaScript
Raw Normal View History

import React, { Component } from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
2018-04-06 14:51:52 +01:00
import { previewMounted } from '../redux';
2018-04-06 14:51:52 +01:00
import './preview.css';
const mainId = 'fcc-main-frame';
const mapDispatchToProps = dispatch =>
bindActionCreators(
{
previewMounted
},
dispatch
);
const propTypes = {
className: PropTypes.string,
disableIframe: PropTypes.bool,
previewMounted: PropTypes.func.isRequired
};
class Preview extends Component {
constructor(...props) {
super(...props);
this.state = {
iframeStatus: props.disableIframe
};
}
componentDidMount() {
this.props.previewMounted();
}
componentDidUpdate(prevProps) {
if (this.props.disableIframe !== prevProps.disableIframe) {
// eslint-disable-next-line react/no-did-update-set-state
this.setState({ iframeStatus: !this.state.iframeStatus });
}
}
render() {
const iframeToggle = this.state.iframeStatus ? 'disable' : 'enable';
return (
<div className={`challenge-preview ${iframeToggle}-iframe`}>
<iframe className={'challenge-preview-frame'} id={mainId} title='Challenge Preview'/>
</div>
);
}
2018-04-06 14:51:52 +01:00
}
Preview.displayName = 'Preview';
Preview.propTypes = propTypes;
2018-04-06 14:51:52 +01:00
export default connect(
null,
mapDispatchToProps
)(Preview);