mirror of
https://github.com/johannesjo/super-productivity.git
synced 2026-01-22 18:30:09 +00:00
212 lines
5.6 KiB
TypeScript
212 lines
5.6 KiB
TypeScript
import {
|
|
JiraIssue,
|
|
JiraIssueReduced,
|
|
} from './providers/jira/jira-issue/jira-issue.model';
|
|
import { JiraCfg } from './providers/jira/jira.model';
|
|
import { GithubCfg } from './providers/github/github.model';
|
|
import {
|
|
GithubIssue,
|
|
GithubIssueReduced,
|
|
} from './providers/github/github-issue/github-issue.model';
|
|
import { GitlabCfg } from './providers/gitlab/gitlab.model';
|
|
import { GitlabIssue } from './providers/gitlab/gitlab-issue/gitlab-issue.model';
|
|
import {
|
|
CaldavIssue,
|
|
CaldavIssueReduced,
|
|
} from './providers/caldav/caldav-issue/caldav-issue.model';
|
|
import { CaldavCfg } from './providers/caldav/caldav.model';
|
|
import { OpenProjectCfg } from './providers/open-project/open-project.model';
|
|
import {
|
|
OpenProjectWorkPackage,
|
|
OpenProjectWorkPackageReduced,
|
|
} from './providers/open-project/open-project-issue/open-project-issue.model';
|
|
import { GiteaCfg } from './providers/gitea/gitea.model';
|
|
import { GiteaIssue } from './providers/gitea/gitea-issue/gitea-issue.model';
|
|
import { RedmineCfg } from './providers/redmine/redmine.model';
|
|
import { RedmineIssue } from './providers/redmine/redmine-issue/redmine-issue.model';
|
|
import { EntityState } from '@ngrx/entity';
|
|
import { MODEL_VERSION_KEY } from '../../app.constants';
|
|
import {
|
|
ICalIssue,
|
|
ICalIssueReduced,
|
|
CalendarProviderCfg,
|
|
} from './providers/calendar/calendar.model';
|
|
|
|
export interface BaseIssueProviderCfg {
|
|
isEnabled: boolean;
|
|
}
|
|
|
|
export type IssueProviderKey =
|
|
| 'JIRA'
|
|
| 'GITHUB'
|
|
| 'GITLAB'
|
|
| 'CALDAV'
|
|
| 'ICAL'
|
|
| 'OPEN_PROJECT'
|
|
| 'GITEA'
|
|
| 'REDMINE';
|
|
|
|
export type IssueIntegrationCfg =
|
|
| JiraCfg
|
|
| GithubCfg
|
|
| GitlabCfg
|
|
| CaldavCfg
|
|
| CalendarProviderCfg
|
|
| OpenProjectCfg
|
|
| GiteaCfg
|
|
| RedmineCfg;
|
|
|
|
export enum IssueLocalState {
|
|
OPEN = 'OPEN',
|
|
IN_PROGRESS = 'IN_PROGRESS',
|
|
DONE = 'DONE',
|
|
}
|
|
|
|
export interface IssueIntegrationCfgs {
|
|
// should be the same as key IssueProviderKey
|
|
JIRA?: JiraCfg;
|
|
GITHUB?: GithubCfg;
|
|
GITLAB?: GitlabCfg;
|
|
CALDAV?: CaldavCfg;
|
|
CALENDAR?: CalendarProviderCfg;
|
|
OPEN_PROJECT?: OpenProjectCfg;
|
|
GITEA?: GiteaCfg;
|
|
REDMINE?: RedmineCfg;
|
|
}
|
|
|
|
export type IssueData =
|
|
| JiraIssue
|
|
| GithubIssue
|
|
| GitlabIssue
|
|
| CaldavIssue
|
|
| ICalIssue
|
|
| OpenProjectWorkPackage
|
|
| GiteaIssue
|
|
| RedmineIssue;
|
|
|
|
export type IssueDataReduced =
|
|
| GithubIssueReduced
|
|
| JiraIssueReduced
|
|
| GitlabIssue
|
|
| OpenProjectWorkPackageReduced
|
|
| CaldavIssueReduced
|
|
| ICalIssueReduced
|
|
| GiteaIssue
|
|
| RedmineIssue;
|
|
|
|
export type IssueDataReducedMap = {
|
|
[K in IssueProviderKey]: K extends 'JIRA'
|
|
? JiraIssueReduced
|
|
: K extends 'GITHUB'
|
|
? GithubIssueReduced
|
|
: K extends 'GITLAB'
|
|
? GitlabIssue
|
|
: K extends 'CALDAV'
|
|
? CaldavIssueReduced
|
|
: K extends 'ICAL'
|
|
? ICalIssueReduced
|
|
: K extends 'OPEN_PROJECT'
|
|
? OpenProjectWorkPackageReduced
|
|
: K extends 'GITEA'
|
|
? GiteaIssue
|
|
: K extends 'REDMINE'
|
|
? RedmineIssue
|
|
: never;
|
|
};
|
|
|
|
export interface SearchResultItem<
|
|
T extends keyof IssueDataReducedMap = keyof IssueDataReducedMap,
|
|
> {
|
|
title: string;
|
|
issueType: T;
|
|
issueData: IssueDataReducedMap[T];
|
|
titleHighlighted?: string;
|
|
}
|
|
|
|
export interface SearchResultItemWithProviderId extends SearchResultItem {
|
|
issueProviderId: string;
|
|
}
|
|
|
|
// ISSUE PROVIDER MODEL
|
|
// --------------------
|
|
|
|
export interface IssueProviderState extends EntityState<IssueProvider> {
|
|
ids: string[];
|
|
// additional entities state properties
|
|
[MODEL_VERSION_KEY]: number;
|
|
}
|
|
|
|
// export type IssueProviderState = EntityState<IssueProvider>;
|
|
|
|
export interface IssueProviderBase extends BaseIssueProviderCfg {
|
|
id: string;
|
|
isEnabled: boolean;
|
|
issueProviderKey: IssueProviderKey;
|
|
defaultProjectId: string | null;
|
|
pinnedSearch: string | null;
|
|
// delete at some point in the future
|
|
migratedFromProjectId?: string;
|
|
isAutoPoll: boolean;
|
|
isAutoAddToBacklog: boolean;
|
|
isIntegratedAddTaskBar: boolean;
|
|
}
|
|
|
|
export interface IssueProviderJira extends IssueProviderBase, JiraCfg {
|
|
issueProviderKey: 'JIRA';
|
|
}
|
|
|
|
export interface IssueProviderGithub extends IssueProviderBase, GithubCfg {
|
|
issueProviderKey: 'GITHUB';
|
|
}
|
|
|
|
export interface IssueProviderGitlab extends IssueProviderBase, GitlabCfg {
|
|
issueProviderKey: 'GITLAB';
|
|
}
|
|
|
|
export interface IssueProviderCaldav extends IssueProviderBase, CaldavCfg {
|
|
issueProviderKey: 'CALDAV';
|
|
}
|
|
|
|
export interface IssueProviderOpenProject extends IssueProviderBase, OpenProjectCfg {
|
|
issueProviderKey: 'OPEN_PROJECT';
|
|
}
|
|
|
|
export interface IssueProviderGitea extends IssueProviderBase, GiteaCfg {
|
|
issueProviderKey: 'GITEA';
|
|
}
|
|
|
|
export interface IssueProviderRedmine extends IssueProviderBase, RedmineCfg {
|
|
issueProviderKey: 'REDMINE';
|
|
}
|
|
|
|
export interface IssueProviderCalendar extends IssueProviderBase, CalendarProviderCfg {
|
|
issueProviderKey: 'ICAL';
|
|
}
|
|
|
|
export type IssueProvider =
|
|
| IssueProviderJira
|
|
| IssueProviderGithub
|
|
| IssueProviderGitlab
|
|
| IssueProviderCaldav
|
|
| IssueProviderCalendar
|
|
| IssueProviderOpenProject
|
|
| IssueProviderGitea
|
|
| IssueProviderRedmine;
|
|
|
|
export type IssueProviderTypeMap<T extends IssueProviderKey> = T extends 'JIRA'
|
|
? IssueProviderJira
|
|
: T extends 'GITHUB'
|
|
? IssueProviderGithub
|
|
: T extends 'GITLAB'
|
|
? IssueProviderGitlab
|
|
: T extends 'GITEA'
|
|
? IssueProviderGitea
|
|
: T extends 'OPEN_PROJECT'
|
|
? IssueProviderOpenProject
|
|
: T extends 'REDMINE'
|
|
? IssueProviderRedmine
|
|
: T extends 'CALDAV'
|
|
? IssueProviderCaldav
|
|
: T extends 'ICAL'
|
|
? IssueProviderCalendar
|
|
: never;
|