zcash-grant-system/frontend/client/api/api.ts

68 lines
2.0 KiB
TypeScript
Raw Normal View History

2018-09-10 09:55:26 -07:00
import axios from './axios';
import { Proposal } from 'modules/proposals/reducers';
import { TeamMember } from 'modules/create/types';
import { formatTeamMemberForPost, formatTeamMemberFromGet } from 'utils/api';
import { PROPOSAL_CATEGORY } from './constants';
2018-09-10 09:55:26 -07:00
export function getProposals(): Promise<{ data: Proposal[] }> {
return axios.get('/api/v1/proposals/').then(res => {
res.data = res.data.map((proposal: any) => {
proposal.team = proposal.team.map(formatTeamMemberFromGet);
return proposal;
});
return res;
});
2018-09-10 09:55:26 -07:00
}
export function getProposal(proposalId: number | string): Promise<{ data: Proposal }> {
return axios.get(`/api/v1/proposals/${proposalId}`).then(res => {
res.data.team = res.data.team.map(formatTeamMemberFromGet);
return res;
});
2018-09-10 09:55:26 -07:00
}
export function getProposalComments(proposalId: number | string) {
2018-09-18 15:20:17 -07:00
return axios.get(`/api/v1/proposals/${proposalId}/comments`);
2018-09-10 09:55:26 -07:00
}
export function getProposalUpdates(proposalId: number | string) {
2018-09-18 15:20:17 -07:00
return axios.get(`/api/v1/proposals/${proposalId}/updates`);
2018-09-10 09:55:26 -07:00
}
export function postProposal(payload: {
2018-09-18 15:20:17 -07:00
// TODO type Milestone
accountAddress: string;
crowdFundContractAddress: string;
content: string;
title: string;
category: PROPOSAL_CATEGORY;
2018-09-18 15:20:17 -07:00
milestones: object[];
team: TeamMember[];
2018-09-10 09:55:26 -07:00
}) {
return axios.post(`/api/v1/proposals/`, {
...payload,
// Team has a different shape for POST
team: payload.team.map(formatTeamMemberForPost),
});
2018-09-10 09:55:26 -07:00
}
export function getUser(address: string): Promise<{ data: TeamMember }> {
return axios.get(`/api/v1/users/${address}`).then(res => {
res.data = formatTeamMemberFromGet(res.data);
return res;
});
}
export function createUser(payload: {
accountAddress: string;
emailAddress: string;
displayName: string;
title: string;
token: string;
}): Promise<{ data: TeamMember }> {
return axios.post(`/api/v1/users/`, payload).then(res => {
res.data = formatTeamMemberFromGet(res.data);
return res;
});
}