import React from 'react'; import { connect } from 'react-redux'; import { Icon, Timeline } from 'antd'; import moment from 'moment'; import { Milestone } from 'modules/create/types'; import { getCreateErrors, KeyOfForm, FIELD_NAME_MAP } from 'modules/create/utils'; import Markdown from 'components/Markdown'; import { AppState } from 'store/reducers'; import { CREATE_STEP } from './index'; import { CATEGORY_UI } from 'api/constants'; import './Review.less'; interface OwnProps { setStep(step: CREATE_STEP): void; } interface StateProps { form: AppState['create']['form']; } type Props = OwnProps & StateProps; interface Field { key: KeyOfForm; content: React.ReactNode; error: string | undefined | false; } interface Section { step: CREATE_STEP; name: string; fields: Field[]; } class CreateReview extends React.Component { render() { const { form } = this.props; const errors = getCreateErrors(this.props.form); const catUI = CATEGORY_UI[form.category] || ({} as any); const sections: Section[] = [ { step: CREATE_STEP.BASICS, name: 'Basics', fields: [ { key: 'title', content:

{form.title}

, error: errors.title, }, { key: 'brief', content: form.brief, error: errors.brief, }, { key: 'category', content: (
{catUI.label}
), error: errors.category, }, { key: 'amountToRaise', content:
{form.amountToRaise} ETH
, error: errors.amountToRaise, }, ], }, // { // step: CREATE_STEP.TEAM, // name: 'Team', // fields: [], // }, { step: CREATE_STEP.DETAILS, name: 'Details', fields: [ { key: 'details', content: , error: errors.details, }, ], }, { step: CREATE_STEP.MILESTONES, name: 'Milestones', fields: [ { key: 'milestones', content: , error: errors.milestones && errors.milestones.join(' '), }, ], }, { step: CREATE_STEP.GOVERNANCE, name: 'Governance', fields: [ { key: 'payOutAddress', content: {form.payOutAddress}, error: errors.payOutAddress, }, { key: 'trustees', content: form.trustees.map(t => (
{t}
)), error: errors.trustees && errors.trustees.join(' '), }, { key: 'deadline', content: `${Math.floor(moment.duration(form.deadline * 1000).asDays())} days`, error: errors.deadline, }, { key: 'milestoneDeadline', content: `${Math.floor( moment.duration(form.milestoneDeadline * 1000).asDays(), )} days`, error: errors.milestoneDeadline, }, ], }, ]; return (
{sections.map(s => (
{s.fields.map(f => (
{FIELD_NAME_MAP[f.key]} {f.error &&
{f.error}
}
{this.isEmpty(form[f.key]) ? (
N/A
) : ( f.content )}
))}
))}
); } private setStep = (step: CREATE_STEP) => { this.props.setStep(step); }; private isEmpty(value: any) { return !value || value.length === 0; } } export default connect(state => ({ form: state.create.form, }))(CreateReview); const ReviewMilestones = ({ milestones }: { milestones: Milestone[] }) => ( {milestones.map(m => (
{m.title}
{moment(m.date).format('MMMM YYYY')} {' – '} {m.payoutPercent}% of funds
{m.description}
))}
);