const bindAll = require('lodash.bindall'); const FormattedDate = require('react-intl').FormattedDate; const injectIntl = require('react-intl').injectIntl; const PropTypes = require('prop-types'); const React = require('react'); const Formsy = require('formsy-react').default; const classNames = require('classnames'); const approx = require('approximate-number'); const GUI = require('scratch-gui').default; const IntlGUI = injectIntl(GUI); const sessionActions = require('../../redux/session.js'); const decorateText = require('../../lib/decorate-text.jsx'); const FlexRow = require('../../components/flex-row/flex-row.jsx'); const Button = require('../../components/forms/button.jsx'); const Avatar = require('../../components/avatar/avatar.jsx'); const CappedNumber = require('../../components/cappednumber/cappednumber.jsx'); const ShareBanner = require('../../components/share-banner/share-banner.jsx'); const ThumbnailColumn = require('../../components/thumbnailcolumn/thumbnailcolumn.jsx'); const InplaceInput = require('../../components/forms/inplace-input.jsx'); const ReportModal = require('../../components/modal/report/modal.jsx'); const projectShape = require('./projectshape.jsx').projectShape; require('./preview.scss'); class PreviewPresentation extends React.Component { constructor (props) { super(props); bindAll(this, [ 'handleReportClick', 'handleReportClose', 'handleReportSubmit' ]); this.state = { reportOpen: false }; } handleReportClick (e) { e.preventDefault(); this.setState({reportOpen: true}); } handleReportClose () { this.setState({reportOpen: false}); } handleReportSubmit (formData, callback) { const data = { ...formData, id: this.props.projectId, username: this.props.user.username }; console.log('submit report data', data); // eslint-disable-line no-console // TODO: pass error to modal via callback. callback(); this.setState({reportOpen: false}); } render () { const { editable, faved, favoriteCount, isFullScreen, loved, loveCount, originalInfo, parentInfo, projectId, projectInfo, remixes, sessionStatus, studios, user, onFavoriteClicked, onLoveClicked, onSeeInside, onUpdate // ...otherProps TBD } = this.props; const shareDate = (projectInfo.history && projectInfo.history.shared) ? projectInfo.history.shared : ''; return (
{projectInfo.history && shareDate === '' && This project is not shared — so only you can see it. Click share to let everyone see it! } { projectInfo && projectInfo.author && projectInfo.author.id && (
{editable ? :
{projectInfo.title}
}
{sessionStatus === sessionActions.Status.FETCHED && Object.keys(user).length > 0 && user.id !== projectInfo.author.id && }
{parentInfo && parentInfo.author && parentInfo.id && (
Thanks to {parentInfo.author.username} for the original project {parentInfo.title} .
)} {originalInfo && originalInfo.author && originalInfo.id && (
Thanks to {originalInfo.author.username} for the original project {originalInfo.title} .
)} {/* eslint-disable max-len */}
Instructions
{editable ? :
{decorateText(projectInfo.instructions)}
}
Notes and Credits
{editable ? :
{decorateText(projectInfo.description)}
}
{/* eslint-enable max-len */}
{approx(loveCount, {decimal: false})}
{approx(favoriteCount, {decimal: false})}
{approx(projectInfo.stats.remixes, {decimal: false})}
©
{' '} {/* eslint-disable react/jsx-sort-props */} {shareDate === null ? 'Unshared' : } {/* eslint-enable react/jsx-sort-props */}
{ sessionStatus === sessionActions.Status.FETCHED && Object.keys(user).length > 0 && user.id !== projectInfo.author.id && [ , ] }
Comments go here
{/* hide remixes if there aren't any */} {remixes && remixes.length !== 0 && (
Remixes
{remixes && remixes.length === 0 ? ( // TODO: style remix invitation Invite user to remix ) : ( )}
)} {/* hide studios if there aren't any */} {studios && studios.length !== 0 && (
Studios
{studios && studios.length === 0 ? ( // TODO: invite user to add to studio? None ) : ( )}
)}
)}
); } } PreviewPresentation.propTypes = { editable: PropTypes.bool, faved: PropTypes.bool, favoriteCount: PropTypes.number, isFullScreen: PropTypes.bool, loveCount: PropTypes.number, loved: PropTypes.bool, onFavoriteClicked: PropTypes.func, onLoveClicked: PropTypes.func, onSeeInside: PropTypes.func, onUpdate: PropTypes.func, originalInfo: projectShape, parentInfo: projectShape, projectId: PropTypes.string, projectInfo: projectShape, remixes: PropTypes.arrayOf(PropTypes.object), sessionStatus: PropTypes.string.isRequired, studios: PropTypes.arrayOf(PropTypes.object), user: PropTypes.shape({ id: PropTypes.number, banned: PropTypes.bool, username: PropTypes.string, token: PropTypes.string, thumbnailUrl: PropTypes.string, dateJoined: PropTypes.string, email: PropTypes.string, classroomId: PropTypes.string }).isRequired }; module.exports = injectIntl(PreviewPresentation);