2018-09-20 11:58:47 -07:00
|
|
|
import { Dispatch } from 'redux';
|
2018-11-14 08:43:00 -08:00
|
|
|
import { ProposalDraft } from 'types';
|
2018-09-20 11:58:47 -07:00
|
|
|
import { AppState } from 'store/reducers';
|
|
|
|
import { createCrowdFund } from 'modules/web3/actions';
|
2018-11-13 08:07:09 -08:00
|
|
|
import types, { CreateDraftOptions } from './types';
|
2018-09-20 11:58:47 -07:00
|
|
|
|
|
|
|
type GetState = () => AppState;
|
|
|
|
|
2018-11-13 14:51:02 -08:00
|
|
|
export function initializeForm(proposalId: number) {
|
|
|
|
return {
|
|
|
|
type: types.INITIALIZE_FORM_PENDING,
|
|
|
|
payload: proposalId,
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2018-11-14 08:43:00 -08:00
|
|
|
export function updateForm(form: Partial<ProposalDraft>) {
|
2018-09-20 11:58:47 -07:00
|
|
|
return (dispatch: Dispatch<any>) => {
|
|
|
|
dispatch({
|
|
|
|
type: types.UPDATE_FORM,
|
|
|
|
payload: form,
|
|
|
|
});
|
|
|
|
dispatch(saveDraft());
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export function saveDraft() {
|
2018-11-14 08:43:00 -08:00
|
|
|
return { type: types.SAVE_DRAFT_PENDING };
|
2018-09-20 11:58:47 -07:00
|
|
|
}
|
|
|
|
|
2018-11-13 08:07:09 -08:00
|
|
|
export function fetchDrafts() {
|
2018-11-13 14:51:02 -08:00
|
|
|
return { type: types.FETCH_DRAFTS_PENDING };
|
2018-11-13 08:07:09 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
export function createDraft(opts: CreateDraftOptions = {}) {
|
|
|
|
return {
|
|
|
|
type: types.CREATE_DRAFT_PENDING,
|
|
|
|
payload: opts,
|
2018-09-20 11:58:47 -07:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2018-11-14 08:43:00 -08:00
|
|
|
export function createProposal(form: ProposalDraft) {
|
2018-09-20 11:58:47 -07:00
|
|
|
return async (dispatch: Dispatch<any>, getState: GetState) => {
|
|
|
|
const state = getState();
|
|
|
|
// TODO: Handle if contract is unavailable
|
|
|
|
const contract = state.web3.contracts[0];
|
|
|
|
// TODO: Move more of the backend handling into this action.
|
2018-11-14 08:43:00 -08:00
|
|
|
dispatch(createCrowdFund(contract, form));
|
2018-09-20 11:58:47 -07:00
|
|
|
// TODO: dispatch reset conditionally, if crowd fund is success
|
|
|
|
};
|
|
|
|
}
|