Proposal deadlines (#28)

* add proposal versioning

* remove deadlines

* remove acceptedWithFunding

* fix lint, remove commented code

* refactor backend to provide isVersionTwo

* refactor backend to provide isVersionTwo

* Revert "refactor backend to provide isVersionTwo"

This reverts commit e3b9bc661081e482326f83fa6aa517cf6bdebe6c.

* trigger ci

* remove "version"
This commit is contained in:
Daniel Ternyak 2019-10-11 14:52:52 -05:00 committed by GitHub
parent 746398c59b
commit 701a2f95a9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 7 additions and 54 deletions

View File

@ -234,7 +234,7 @@ class Proposal(db.Model):
# Payment info
target = db.Column(db.String(255), nullable=False)
payout_address = db.Column(db.String(255), nullable=False)
deadline_duration = db.Column(db.Integer(), nullable=False)
deadline_duration = db.Column(db.Integer(), nullable=True)
contribution_matching = db.Column(db.Float(), nullable=False, default=0, server_default=db.text("0"))
contribution_bounty = db.Column(db.String(255), nullable=False, default='0', server_default=db.text("'0'"))
rfp_opt_in = db.Column(db.Boolean(), nullable=True)

View File

@ -228,7 +228,6 @@ def get_proposal_drafts():
"content": fields.Str(required=True),
"target": fields.Str(required=True),
"payoutAddress": fields.Str(required=True),
"deadlineDuration": fields.Int(required=True),
"milestones": fields.List(fields.Dict(), required=True),
"rfpOptIn": fields.Bool(required=False, missing=None),
})

View File

@ -1,14 +1,11 @@
import React from 'react';
import { Input, Form, Radio } from 'antd';
import { RadioChangeEvent } from 'antd/lib/radio';
import { Input, Form } from 'antd';
import { ProposalDraft } from 'types';
import { getCreateErrors } from 'modules/create/utils';
import { ONE_DAY } from 'utils/time';
import { DONATION } from 'utils/constants';
interface State {
payoutAddress: string;
deadlineDuration: number;
}
interface Props {
@ -21,13 +18,12 @@ export default class CreateFlowPayment extends React.Component<Props, State> {
super(props);
this.state = {
payoutAddress: '',
deadlineDuration: ONE_DAY * 60,
...(props.initialState || {}),
};
}
render() {
const { payoutAddress, deadlineDuration } = this.state;
const { payoutAddress } = this.state;
const errors = getCreateErrors(this.state, true);
const payoutHelp =
errors.payoutAddress ||
@ -52,31 +48,6 @@ export default class CreateFlowPayment extends React.Component<Props, State> {
onChange={this.handleInputChange}
/>
</Form.Item>
<Form.Item label="Funding Deadline">
<Radio.Group
name="deadlineDuration"
value={deadlineDuration}
onChange={this.handleRadioChange}
size="large"
style={{ display: 'flex', textAlign: 'center' }}
>
{deadlineDuration === 300 && (
<Radio.Button style={{ flex: 1 }} value={300}>
5 minutes
</Radio.Button>
)}
<Radio.Button style={{ flex: 1 }} value={ONE_DAY * 30}>
30 Days
</Radio.Button>
<Radio.Button style={{ flex: 1 }} value={ONE_DAY * 60}>
60 Days
</Radio.Button>
<Radio.Button style={{ flex: 1 }} value={ONE_DAY * 90}>
90 Days
</Radio.Button>
</Radio.Group>
</Form.Item>
</Form>
);
}
@ -89,11 +60,4 @@ export default class CreateFlowPayment extends React.Component<Props, State> {
this.props.updateForm(this.state);
});
};
private handleRadioChange = (event: RadioChangeEvent) => {
const { value, name } = event.target;
this.setState({ [name as string]: value } as any, () => {
this.props.updateForm(this.state);
});
};
}

View File

@ -118,13 +118,6 @@ class CreateReview extends React.Component<Props> {
content: <code>{form.payoutAddress}</code>,
error: errors.payoutAddress,
},
{
key: 'deadlineDuration',
content: `${Math.floor(
moment.duration((form.deadlineDuration || 0) * 1000).asDays(),
)} days`,
error: errors.deadlineDuration,
},
],
},
];

View File

@ -47,7 +47,6 @@ const createExampleProposal = (): Partial<ProposalDraft> => {
immediatePayout: false,
},
],
deadlineDuration: 300,
};
};

View File

@ -54,7 +54,9 @@ export class ProposalCampaignBlock extends React.Component<Props, State> {
const { target, funded, percentFunded } = proposal;
const datePublished = proposal.datePublished || Date.now() / 1000;
const isRaiseGoalReached = funded.gte(target);
const deadline = (datePublished + proposal.deadlineDuration) * 1000;
const deadline = proposal.deadlineDuration
? (datePublished + proposal.deadlineDuration) * 1000
: 0;
const isFrozen =
proposal.stage === PROPOSAL_STAGE.FAILED ||
proposal.stage === PROPOSAL_STAGE.CANCELED;

View File

@ -30,7 +30,6 @@ interface CreateFormErrors {
content?: string;
payoutAddress?: string;
milestones?: string[];
deadlineDuration?: string;
}
export type KeyOfForm = keyof CreateFormErrors;
@ -44,7 +43,6 @@ export const FIELD_NAME_MAP: { [key in KeyOfForm]: string } = {
content: 'Details',
payoutAddress: 'Payout address',
milestones: 'Milestones',
deadlineDuration: 'Funding deadline',
};
const requiredFields = [
@ -54,7 +52,6 @@ const requiredFields = [
'target',
'content',
'payoutAddress',
'deadlineDuration',
];
export function getCreateErrors(
@ -240,7 +237,6 @@ export function makeProposalPreviewFromDraft(draft: ProposalDraft): ProposalDeta
dateCreated: Date.now() / 1000,
datePublished: Date.now() / 1000,
dateApproved: Date.now() / 1000,
deadlineDuration: 86400 * 60,
target: toZat(draft.target),
funded: Zat('0'),
contributionMatching: 0,

View File

@ -39,12 +39,12 @@ export interface ProposalDraft {
stage: PROPOSAL_STAGE;
target: string;
payoutAddress: string;
deadlineDuration: number;
milestones: CreateMilestone[];
team: User[];
invites: TeamInvite[];
status: STATUS;
isStaked: boolean;
deadlineDuration?: number;
rfp?: RFP;
rfpOptIn?: boolean;
}