2019-02-05 12:34:19 -08:00
|
|
|
import { Proposal } from './proposal';
|
|
|
|
import { PROPOSAL_SORT, PROPOSAL_CATEGORY, PROPOSAL_STAGE } from 'api/constants';
|
|
|
|
|
|
|
|
export interface Page {
|
|
|
|
page: number;
|
|
|
|
pageSize: number;
|
|
|
|
total: number;
|
|
|
|
search: string;
|
|
|
|
sort: string;
|
|
|
|
filters: string[];
|
|
|
|
}
|
|
|
|
|
2019-02-17 18:13:24 -08:00
|
|
|
export interface ServerPage<T> extends Page {
|
|
|
|
items: T[];
|
|
|
|
}
|
|
|
|
|
2019-02-05 12:34:19 -08:00
|
|
|
export type PageParams = Omit<Page, 'pageSize' | 'total'>;
|
|
|
|
|
|
|
|
export interface Loadable {
|
|
|
|
hasFetched: boolean;
|
|
|
|
isFetching: boolean;
|
|
|
|
fetchError: null | string;
|
|
|
|
fetchTime: number;
|
|
|
|
}
|
|
|
|
|
|
|
|
export interface ProposalPage extends Omit<Page, 'filters' | 'sort'> {
|
|
|
|
items: Proposal[];
|
|
|
|
sort: PROPOSAL_SORT;
|
|
|
|
filters: {
|
|
|
|
stage: PROPOSAL_STAGE[];
|
|
|
|
category: PROPOSAL_CATEGORY[];
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2019-02-17 18:13:24 -08:00
|
|
|
export type LoadablePage = Page & Loadable;
|
|
|
|
|
2019-02-05 12:34:19 -08:00
|
|
|
export type LoadableProposalPage = ProposalPage & Loadable;
|
|
|
|
|
|
|
|
export type ProposalPageParams = Omit<ProposalPage, 'items' | 'pageSize' | 'total'>;
|
2019-02-17 18:13:24 -08:00
|
|
|
|
|
|
|
export interface Moreable<T> extends LoadablePage {
|
|
|
|
pages: T[][]; // ex: Comment
|
|
|
|
hasMore: boolean;
|
|
|
|
parentId: null | number; // ex: proposalId, parentCommentId... (optional)
|
|
|
|
}
|