import React from 'react'; import { connect } from 'react-redux'; import { Link } from 'react-router-dom'; import { List, Button, Divider, Popconfirm, message } from 'antd'; import Placeholder from 'components/Placeholder'; import Loader from 'components/Loader'; import { ProposalDraft, STATUS } from 'types'; import { fetchDrafts, createDraft, deleteDraft } from 'modules/create/actions'; import { AppState } from 'store/reducers'; import './style.less'; interface StateProps { drafts: AppState['create']['drafts']; isFetchingDrafts: AppState['create']['isFetchingDrafts']; fetchDraftsError: AppState['create']['fetchDraftsError']; isCreatingDraft: AppState['create']['isCreatingDraft']; createDraftError: AppState['create']['createDraftError']; isDeletingDraft: AppState['create']['isDeletingDraft']; deleteDraftError: AppState['create']['deleteDraftError']; } interface DispatchProps { fetchDrafts: typeof fetchDrafts; createDraft: typeof createDraft; deleteDraft: typeof deleteDraft; } interface OwnProps { createIfNone?: boolean; } type Props = StateProps & DispatchProps & OwnProps; interface State { deletingId: number | null; } class DraftList extends React.Component { state: State = { deletingId: null, }; componentWillMount() { this.props.fetchDrafts(); } componentDidUpdate(prevProps: Props) { const { drafts, createIfNone, isDeletingDraft, deleteDraftError, createDraftError, } = this.props; if (createIfNone && drafts && !prevProps.drafts && !drafts.length) { this.createDraft(); } if (prevProps.isDeletingDraft && !isDeletingDraft) { this.setState({ deletingId: null }); } if (deleteDraftError && prevProps.deleteDraftError !== deleteDraftError) { message.error('Failed to delete draft', 3); } if (createDraftError && prevProps.createDraftError !== createDraftError) { message.error('Failed to create draft', 3); } } render() { const { drafts, isCreatingDraft } = this.props; const { deletingId } = this.state; if (!drafts || isCreatingDraft) { return ; } let draftsEl; if (drafts.length) { draftsEl = ( { const actions = [ Edit , this.deleteDraft(d.proposalId)} > Delete , ]; return ( {d.title || Untitled proposal} {d.status === STATUS.REJECTED && (rejected)} } description={d.brief || No description} /> {deletingId === d.proposalId && } ); }} /> ); } else { draftsEl = ( ); } return (

Your drafts

{draftsEl} or
); } private createDraft = () => { this.props.createDraft({ redirect: true }); }; private deleteDraft = (proposalId: number) => { this.props.deleteDraft(proposalId); this.setState({ deletingId: proposalId }); }; } export default connect( state => ({ drafts: state.create.drafts, isFetchingDrafts: state.create.isFetchingDrafts, fetchDraftsError: state.create.fetchDraftsError, isCreatingDraft: state.create.isCreatingDraft, createDraftError: state.create.createDraftError, isDeletingDraft: state.create.isDeletingDraft, deleteDraftError: state.create.deleteDraftError, }), { fetchDrafts, createDraft, deleteDraft, }, )(DraftList);