78 lines
1.5 KiB
TypeScript
78 lines
1.5 KiB
TypeScript
|
|
export interface Config {
|
||
|
|
url: string;
|
||
|
|
token: string | null;
|
||
|
|
owner: string;
|
||
|
|
repo: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface User {
|
||
|
|
id: number;
|
||
|
|
login: string;
|
||
|
|
full_name: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface Label {
|
||
|
|
id: number;
|
||
|
|
name: string;
|
||
|
|
color: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface Issue {
|
||
|
|
id: number;
|
||
|
|
number: number;
|
||
|
|
title: string;
|
||
|
|
state: 'open' | 'closed';
|
||
|
|
body: string;
|
||
|
|
user: User;
|
||
|
|
created_at: string;
|
||
|
|
updated_at: string;
|
||
|
|
comments: number;
|
||
|
|
labels: Label[];
|
||
|
|
pull_request?: any | null;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface Comment {
|
||
|
|
id: number;
|
||
|
|
user: User;
|
||
|
|
body: string;
|
||
|
|
created_at: string;
|
||
|
|
updated_at: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface SetupForm {
|
||
|
|
url: string;
|
||
|
|
token: string;
|
||
|
|
repo: string;
|
||
|
|
activeField: 'url' | 'token' | 'repo';
|
||
|
|
}
|
||
|
|
|
||
|
|
export type ScreenType = 'setup' | 'list' | 'details';
|
||
|
|
|
||
|
|
export interface AppState {
|
||
|
|
screen: ScreenType;
|
||
|
|
config: Config;
|
||
|
|
|
||
|
|
// List Screen State
|
||
|
|
issues: Issue[];
|
||
|
|
currentPage: number;
|
||
|
|
issuesPerPage: number;
|
||
|
|
totalIssuesCount: number; // calculated or fetched
|
||
|
|
loading: boolean;
|
||
|
|
error: string | null;
|
||
|
|
selectedIssueIndex: number; // cursor in list
|
||
|
|
searchQuery: string;
|
||
|
|
stateFilter: 'open' | 'closed' | 'all';
|
||
|
|
typeFilter: 'issues' | 'pulls' | 'all';
|
||
|
|
sortField: 'created' | 'updated' | 'comments';
|
||
|
|
sortOrder: 'asc' | 'desc';
|
||
|
|
|
||
|
|
// Detail Screen State
|
||
|
|
selectedIssue: Issue | null;
|
||
|
|
selectedIssueComments: Comment[];
|
||
|
|
commentsLoading: boolean;
|
||
|
|
detailScrollOffset: number;
|
||
|
|
|
||
|
|
// Setup Form State
|
||
|
|
setupForm: SetupForm;
|
||
|
|
}
|