zcash-grant-system/admin/src/types.ts

199 lines
4.2 KiB
TypeScript
Raw Normal View History

// backend
export interface SocialMedia {
url: string;
service: string;
username: string;
}
2019-02-13 08:54:46 -08:00
// NOTE: sync with backend/grant/utils/enums.py MilestoneStage
export enum MILESTONE_STAGE {
IDLE = 'IDLE',
REQUESTED = 'REQUESTED',
REJECTED = 'REJECTED',
ACCEPTED = 'ACCEPTED',
PAID = 'PAID',
}
export interface Milestone {
2019-02-13 08:54:46 -08:00
id: number;
index: number;
content: string;
2019-02-13 08:54:46 -08:00
dateCreated: number;
dateEstimated: number;
dateRequested: number;
dateAccepted: number;
dateRejected: number;
datePaid: number;
immediatePayout: boolean;
payoutPercent: string;
stage: string;
title: string;
}
// NOTE: sync with backend/grant/utils/enums.py RFPStatus
export enum RFP_STATUS {
DRAFT = 'DRAFT',
LIVE = 'LIVE',
CLOSED = 'CLOSED',
}
export interface RFP {
id: number;
dateCreated: number;
2019-02-08 08:54:20 -08:00
dateOpened: number | null;
dateClosed: number | null;
title: string;
brief: string;
content: string;
category: string;
status: string;
proposals: Proposal[];
2019-02-08 08:54:20 -08:00
matching: boolean;
bounty: string | null;
dateCloses: number | null;
}
export interface RFPArgs {
title: string;
brief: string;
content: string;
category: string;
2019-02-08 08:54:20 -08:00
matching: boolean;
dateCloses: number | null | undefined;
bounty: string | null | undefined;
status: string;
}
2019-02-09 19:00:49 -08:00
// NOTE: sync with backend/grant/utils/enums.py ProposalArbiterStatus
export enum PROPOSAL_ARBITER_STATUS {
MISSING = 'MISSING',
NOMINATED = 'NOMINATED',
ACCEPTED = 'ACCEPTED',
}
export interface ProposalArbiter {
user?: User;
proposal: Proposal;
status: PROPOSAL_ARBITER_STATUS;
}
// NOTE: sync with backend/grant/utils/enums.py ProposalStatus
export enum PROPOSAL_STATUS {
DRAFT = 'DRAFT',
PENDING = 'PENDING',
APPROVED = 'APPROVED',
REJECTED = 'REJECTED',
LIVE = 'LIVE',
DELETED = 'DELETED',
STAKING = 'STAKING',
}
// NOTE: sync with backend/grant/utils/enums.py ProposalStage
export enum PROPOSAL_STAGE {
PREVIEW = 'PREVIEW',
FUNDING_REQUIRED = 'FUNDING_REQUIRED',
WIP = 'WIP',
COMPLETED = 'COMPLETED',
}
export interface Proposal {
proposalId: number;
brief: string;
status: PROPOSAL_STATUS;
2019-02-13 08:54:46 -08:00
payoutAddress: string;
dateCreated: number;
dateApproved: number;
datePublished: number;
deadlineDuration: number;
isFailed: boolean;
title: string;
content: string;
stage: PROPOSAL_STAGE;
category: string;
milestones: Milestone[];
2019-02-13 08:54:46 -08:00
currentMilestone?: Milestone;
team: User[];
comments: Comment[];
target: string;
contributed: string;
funded: string;
rejectReason: string;
contributionMatching: number;
rfp?: RFP;
2019-02-09 19:00:49 -08:00
arbiter: ProposalArbiter;
}
export interface Comment {
id: number;
userId: User['userid'];
author?: User;
proposalId: Proposal['proposalId'];
proposal?: Proposal;
dateCreated: number;
content: string;
}
// NOTE: sync with backend/utils/enums.py
export enum CONTRIBUTION_STATUS {
PENDING = 'PENDING',
CONFIRMED = 'CONFIRMED',
DELETED = 'DELETED',
}
export interface Contribution {
id: number;
status: CONTRIBUTION_STATUS;
txId: null | string;
amount: string;
dateCreated: number;
user: User;
proposal: Proposal;
2019-02-06 10:01:14 -08:00
addresses: {
transparent: string;
sprout: string;
memo: string;
};
}
export interface ContributionArgs {
2019-02-06 11:01:46 -08:00
proposalId: string | number;
userId: string | number;
amount: string;
2019-02-06 11:01:46 -08:00
status: string;
txId?: string;
}
export interface User {
accountAddress: string;
avatar: null | { imageUrl: string };
displayName: string;
emailAddress: string;
socialMedias: SocialMedia[];
title: string;
userid: number;
proposals: Proposal[];
comments: Comment[];
contributions: Contribution[];
silenced: boolean;
banned: boolean;
bannedReason: string;
}
export interface EmailExample {
info: {
subject: string;
title: string;
preview: string;
};
html: string;
text: string;
}
export enum PROPOSAL_CATEGORY {
DEV_TOOL = 'DEV_TOOL',
CORE_DEV = 'CORE_DEV',
COMMUNITY = 'COMMUNITY',
DOCUMENTATION = 'DOCUMENTATION',
ACCESSIBILITY = 'ACCESSIBILITY',
}
export interface PageQuery {
page: number;
filters: string[];
search: string;
sort: string;
}
export interface PageData<T> extends PageQuery {
pageSize: number;
total: number;
items: T[];
fetching: boolean;
fetched: boolean;
}