use crate::api::types::*;
use crate::grouping::Preset;
#[derive(Debug, Clone, PartialEq)]
pub enum Request {
Teams,
Viewer,
TeamContext {
team_id: String,
},
Issues {
team_id: String,
after: Option<String>,
preset: Preset,
},
MyIssues {
user_id: String,
after: Option<String>,
},
Search {
term: String,
team_id: Option<String>,
},
CustomViews,
Favorites,
ViewIssues {
view_id: String,
after: Option<String>,
},
Projects {
team_id: String,
after: Option<String>,
},
Cycles {
team_id: String,
after: Option<String>,
},
IssueDetail {
issue_id: String,
},
ProjectIssues {
project_id: String,
after: Option<String>,
},
CycleIssues {
cycle_id: String,
after: Option<String>,
},
UpdateStatus {
issue_id: String,
state_id: String,
},
UpdatePriority {
issue_id: String,
priority: u8,
},
UpdateAssignee {
issue_id: String,
assignee_id: Option<String>,
},
CreateComment {
issue_id: String,
body: String,
},
CreateIssue {
team_id: String,
title: String,
description: Option<String>,
priority: u8,
},
OpenUrl(String),
}
#[derive(Debug)]
pub struct Page<T> {
pub items: Vec<T>,
pub page_info: PageInfo,
pub append: bool,
}
impl<T> Page<T> {
pub fn new(items: Vec<T>, page_info: PageInfo, append: bool) -> Self {
Self {
items,
page_info,
append,
}
}
}
#[derive(Debug)]
pub enum Message {
Teams(Vec<Team>),
Viewer(String),
TeamContext {
states: Vec<WorkflowState>,
members: Vec<User>,
},
Issues {
preset: Preset,
page: Page<Issue>,
},
MyIssues(Page<Issue>),
SearchResults {
term: String,
issues: Vec<Issue>,
},
CustomViews(Vec<CustomView>),
Favorites(Vec<Favorite>),
ViewIssues {
view_id: String,
page: Page<Issue>,
},
Projects(Page<Project>),
Cycles(Page<Cycle>),
IssueDetail(Box<Issue>),
ProjectIssues(Page<Issue>),
CycleIssues(Page<Issue>),
IssueCreated(Box<Issue>),
Mutated(&'static str),
Error(String),
}