import PropTypes from 'prop-types'; import React from 'react'; import { DragSource, DropTarget, HTML5DragDrop } from 'react-simple-dnd'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { Link } from 'react-router-dom'; import moment from 'moment'; import { capitalize } from 'lodash' import { Card, CardTitle, CardText, CardActions } from 'react-toolbox/lib/card'; import Button from 'react-toolbox/lib/button'; import UnpublishedListingCardMeta from './UnpublishedListingCardMeta.js'; import { status, statusDescriptions } from '../../constants/publishModes'; import styles from './UnpublishedListing.css'; class UnpublishedListing extends React.Component { static propTypes = { entries: ImmutablePropTypes.orderedMap, handleChangeStatus: PropTypes.func.isRequired, handlePublish: PropTypes.func.isRequired, handleDelete: PropTypes.func.isRequired, }; handleChangeStatus = (newStatus, dragProps) => { const slug = dragProps.slug; const collection = dragProps.collection; const oldStatus = dragProps.ownStatus; this.props.handleChangeStatus(collection, slug, oldStatus, newStatus); }; requestDelete = (collection, slug, ownStatus) => { if (window.confirm('Are you sure you want to delete this entry?')) { this.props.handleDelete(collection, slug, ownStatus); } }; requestPublish = (collection, slug, ownStatus) => { if (ownStatus !== status.last()) return; if (window.confirm('Are you sure you want to publish this entry?')) { this.props.handlePublish(collection, slug, ownStatus); } }; renderColumns = (entries, column) => { if (!entries) return null; if (!column) { return entries.entrySeq().map(([currColumn, currEntries]) => ( {isHovered => (

{statusDescriptions.get(currColumn)}

{this.renderColumns(currEntries, currColumn)}
)}
)); } return (
{ entries.map((entry) => { // Look for an "author" field. Fallback to username on backend implementation; const author = entry.getIn(['data', 'author'], entry.getIn(['metaData', 'user'])); const timeStamp = moment(entry.getIn(['metaData', 'timeStamp'])).format('llll'); const link = `collections/${ entry.getIn(['metaData', 'collection']) }/entries/${ entry.get('slug') }`; const slug = entry.get('slug'); const ownStatus = entry.getIn(['metaData', 'status']); const collection = entry.getIn(['metaData', 'collection']); const isModification = entry.get('isModification'); return (
Last updated: {timeStamp} by {entry.getIn(['metaData', 'user'])} { (ownStatus === status.last() && !entry.get('isPersisting', false)) && }
); }) }
); }; render() { const columns = this.renderColumns(this.props.entries); return (
Editorial Workflow
{columns}
); } } export default HTML5DragDrop(UnpublishedListing); // eslint-disable-line