refactor(issue): simplify folder and file structure

This commit is contained in:
Johannes Millan 2025-06-11 11:10:20 +02:00
parent cb5082b948
commit fbb2382948
78 changed files with 162 additions and 188 deletions

View file

@ -11,8 +11,6 @@ import { IssueContentConfig } from '../../issue-content.model';
import { IssueProviderService } from '../../../issue-provider.service';
import { OpenProjectApiService } from '../../../providers/open-project/open-project-api.service';
import { TaskAttachment } from '../../../../tasks/task-attachment/task-attachment.model';
import { mapOpenProjectAttachmentToTaskAttachment } from '../../../providers/open-project/open-project-issue/open-project-issue-map.util';
import { OpenProjectWorkPackage } from '../../../providers/open-project/open-project-issue/open-project-issue.model';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { MatButtonModule } from '@angular/material/button';
import { MatIconModule } from '@angular/material/icon';
@ -20,6 +18,8 @@ import { TranslateModule } from '@ngx-translate/core';
import { TaskService } from '../../../../tasks/task.service';
import moment from 'moment';
import { SnackService } from '../../../../../core/snack/snack.service';
import { OpenProjectWorkPackage } from '../../../providers/open-project/open-project-issue.model';
import { mapOpenProjectAttachmentToTaskAttachment } from '../../../providers/open-project/open-project-issue-map.util';
@Component({
selector: 'open-project-attachments',

View file

@ -1,35 +1,26 @@
import {
JiraIssue,
JiraIssueReduced,
} from './providers/jira/jira-issue/jira-issue.model';
import { JiraIssue, JiraIssueReduced } from './providers/jira/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 { GithubIssue, GithubIssueReduced } from './providers/github/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 { GitlabIssue } from './providers/gitlab/gitlab-issue.model';
import { CaldavIssue, CaldavIssueReduced } from './providers/caldav/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';
} from './providers/open-project/open-project-issue.model';
import { GiteaCfg } from './providers/gitea/gitea.model';
import { GiteaIssue } from './providers/gitea/gitea-issue/gitea-issue.model';
import { GiteaIssue } from './providers/gitea/gitea-issue.model';
import { RedmineCfg } from './providers/redmine/redmine.model';
import { RedmineIssue } from './providers/redmine/redmine-issue/redmine-issue.model';
import { RedmineIssue } from './providers/redmine/redmine-issue.model';
import { EntityState } from '@ngrx/entity';
import { MODEL_VERSION_KEY } from '../../app.constants';
import {
CalendarProviderCfg,
ICalIssue,
ICalIssueReduced,
CalendarProviderCfg,
} from './providers/calendar/calendar.model';
export interface BaseIssueProviderCfg {

View file

@ -1,4 +1,4 @@
@import '../../../../../../../variables';
@import 'variables';
// table styled by ./src/styles/components/issue-table.scss

View file

@ -1,8 +1,8 @@
import { ChangeDetectionStrategy, Component, Input, input, inject } from '@angular/core';
import { TaskWithSubTasks } from '../../../../../tasks/task.model';
import { expandAnimation } from '../../../../../../ui/animations/expand.ani';
import { T } from '../../../../../../t.const';
import { TaskService } from '../../../../../tasks/task.service';
import { TaskWithSubTasks } from '../../../../tasks/task.model';
import { expandAnimation } from '../../../../../ui/animations/expand.ani';
import { T } from '../../../../../t.const';
import { TaskService } from '../../../../tasks/task.service';
import { CaldavIssue } from '../caldav-issue.model';
import { MatButton } from '@angular/material/button';
import { MatChipListbox, MatChipOption } from '@angular/material/chips';

View file

@ -8,7 +8,7 @@ import Calendar from 'cdav-library/models/calendar';
import ICAL from 'ical.js';
import { from, Observable, throwError } from 'rxjs';
import { CaldavIssue } from './issue/caldav-issue.model';
import { CaldavIssue } from './caldav-issue.model';
import { CALDAV_TYPE, ISSUE_PROVIDER_HUMANIZED } from '../../issue.const';
import { SearchResultItem } from '../../issue.model';
import { SnackService } from '../../../../core/snack/snack.service';

View file

@ -3,7 +3,7 @@ import { Observable, of } from 'rxjs';
import { Task } from 'src/app/features/tasks/task.model';
import { IssueServiceInterface } from '../../issue-service-interface';
import { IssueProviderCaldav, SearchResultItem } from '../../issue.model';
import { CaldavIssue, CaldavIssueReduced } from './issue/caldav-issue.model';
import { CaldavIssue, CaldavIssueReduced } from './caldav-issue.model';
import { CaldavClientService } from './caldav-client.service';
import { CaldavCfg } from './caldav.model';
import { concatMap, first, map, switchMap } from 'rxjs/operators';

View file

@ -3,7 +3,7 @@ import {
IssueContentConfig,
IssueFieldType,
} from '../../issue-content/issue-content.model';
import { CaldavIssue } from './issue/caldav-issue.model';
import { CaldavIssue } from './caldav-issue.model';
import { IssueProviderKey } from '../../issue.model';
export const CALDAV_ISSUE_CONTENT_CONFIG: IssueContentConfig<CaldavIssue> = {

View file

@ -1,17 +1,17 @@
import { Injectable, inject } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { TaskService } from '../../../../tasks/task.service';
import { TaskService } from '../../../tasks/task.service';
import { concatMap, filter, map } from 'rxjs/operators';
import { IssueService } from '../../../issue.service';
import { IssueService } from '../../issue.service';
import { Observable } from 'rxjs';
import { Task } from 'src/app/features/tasks/task.model';
import { CALDAV_TYPE } from '../../../issue.const';
import { isCaldavEnabled } from '../is-caldav-enabled.util';
import { CaldavClientService } from '../caldav-client.service';
import { CaldavCfg } from '../caldav.model';
import { updateTask } from '../../../../tasks/store/task.actions';
import { IssueProviderService } from '../../../issue-provider.service';
import { assertTruthy } from '../../../../../util/assert-truthy';
import { CALDAV_TYPE } from '../../issue.const';
import { isCaldavEnabled } from './is-caldav-enabled.util';
import { CaldavClientService } from './caldav-client.service';
import { CaldavCfg } from './caldav.model';
import { updateTask } from '../../../tasks/store/task.actions';
import { IssueProviderService } from '../../issue-provider.service';
import { assertTruthy } from '../../../../util/assert-truthy';
@Injectable()
export class CaldavIssueEffects {

View file

@ -1,4 +1,4 @@
import { GiteaIssue } from './issue/gitea-issue.model';
import { GiteaIssue } from './gitea-issue.model';
import { truncate } from '../../../../util/truncate';
export const formatGiteaIssueTitle = ({ number, title }: GiteaIssue): string => {

View file

@ -1,4 +1,4 @@
import { GiteaIssueStateOptions } from './issue/gitea-issue.model';
import { GiteaIssueStateOptions } from './gitea-issue.model';
export type GiteaIssueState =
| GiteaIssueStateOptions.open

View file

@ -11,12 +11,12 @@ import {
GiteaIssue,
GiteaIssueStateOptions,
GiteaRepositoryReduced,
} from './issue/gitea-issue.model';
} from './gitea-issue.model';
import {
isIssueFromProject,
mapGiteaIssueIdToIssueNumber,
mapGiteaIssueToSearchResult,
} from './issue/gitea-issue-map.util';
} from './gitea-issue-map.util';
import {
GITEA_API_SUBPATH_REPO,
GITEA_API_SUBPATH_USER,

View file

@ -17,7 +17,7 @@ import {
import { GiteaCfg } from './gitea.model';
import { isGiteaEnabled } from './is-gitea-enabled.util';
import { GiteaApiService } from '../gitea/gitea-api.service';
import { GiteaIssue } from './issue/gitea-issue.model';
import { GiteaIssue } from './gitea-issue.model';
import { IssueProviderService } from '../../issue-provider.service';
@Injectable({

View file

@ -3,7 +3,7 @@ import {
IssueContentConfig,
IssueFieldType,
} from '../../issue-content/issue-content.model';
import { GiteaIssue } from './issue/gitea-issue.model';
import { GiteaIssue } from './gitea-issue.model';
export const GITEA_ISSUE_CONTENT_CONFIG: IssueContentConfig<GiteaIssue> = {
issueType: 'GITEA' as const,

View file

@ -1,7 +1,7 @@
import { IssueProviderKey, SearchResultItem } from '../../../issue.model';
import { GiteaCfg } from '../gitea.model';
import { IssueProviderKey, SearchResultItem } from '../../issue.model';
import { GiteaCfg } from './gitea.model';
import { GiteaIssue } from './gitea-issue.model';
import { formatGiteaIssueTitle } from '../format-gitea-issue-title.util';
import { formatGiteaIssueTitle } from './format-gitea-issue-title.util';
export const mapGiteaIssueToSearchResult = (issue: GiteaIssue): SearchResultItem => {
return {

View file

@ -1,4 +1,4 @@
import { GiteaUser } from '../gitea-api-responses';
import { GiteaUser } from './gitea-api-responses';
export enum GiteaIssueStateOptions {
open = 'open',

View file

@ -1,4 +1,4 @@
@import '../../../../../../../variables';
@import 'variables';
// table styled by ./src/styles/components/issue-table.scss

View file

@ -1,15 +1,15 @@
import { ChangeDetectionStrategy, Component, Input, input, inject } from '@angular/core';
import { TaskWithSubTasks } from '../../../../../tasks/task.model';
import { TaskWithSubTasks } from '../../../../tasks/task.model';
import { GithubComment, GithubIssue } from '../github-issue.model';
import { expandAnimation } from '../../../../../../ui/animations/expand.ani';
import { T } from '../../../../../../t.const';
import { TaskService } from '../../../../../tasks/task.service';
import { expandAnimation } from '../../../../../ui/animations/expand.ani';
import { T } from '../../../../../t.const';
import { TaskService } from '../../../../tasks/task.service';
import { MatButton, MatAnchor } from '@angular/material/button';
import { MatChipListbox, MatChipOption } from '@angular/material/chips';
import { MarkdownComponent, MarkdownPipe } from 'ngx-markdown';
import { MatIcon } from '@angular/material/icon';
import { AsyncPipe, DatePipe } from '@angular/common';
import { SortPipe } from '../../../../../../ui/pipes/sort.pipe';
import { SortPipe } from '../../../../../ui/pipes/sort.pipe';
import { TranslatePipe } from '@ngx-translate/core';
@Component({

View file

@ -16,12 +16,8 @@ import {
mapGithubGraphQLSearchResult,
mapGithubIssue,
mapGithubIssueToSearchResult,
} from './issue/github-issue-map.util';
import {
GithubComment,
GithubIssue,
GithubIssueReduced,
} from './issue/github-issue.model';
} from './github-issue-map.util';
import { GithubComment, GithubIssue, GithubIssueReduced } from './github-issue.model';
import { SearchResultItem } from '../../issue.model';
import { HANDLED_ERROR_PROP_STR } from '../../../../app.constants';
import { T } from '../../../../t.const';

View file

@ -6,7 +6,7 @@ import { IssueServiceInterface } from '../../issue-service-interface';
import { GithubApiService } from './github-api.service';
import { IssueProviderGithub, SearchResultItem } from '../../issue.model';
import { GithubCfg } from './github.model';
import { GithubIssue, GithubIssueReduced } from './issue/github-issue.model';
import { GithubIssue, GithubIssueReduced } from './github-issue.model';
import { truncate } from '../../../../util/truncate';
import { getTimestamp } from '../../../../util/get-timestamp';
import { isGithubEnabled } from './is-github-enabled.util';

View file

@ -3,7 +3,7 @@ import {
IssueContentConfig,
IssueFieldType,
} from '../../issue-content/issue-content.model';
import { GithubIssue } from './issue/github-issue.model';
import { GithubIssue } from './github-issue.model';
export const GITHUB_ISSUE_CONTENT_CONFIG: IssueContentConfig<GithubIssue> = {
issueType: 'GITHUB' as const,

View file

@ -1,6 +1,6 @@
import { GithubIssue, GithubIssueReduced } from './github-issue.model';
import { GithubOriginalIssue } from '../github-api-responses';
import { SearchResultItem } from '../../../issue.model';
import { GithubOriginalIssue } from './github-api-responses';
import { SearchResultItem } from '../../issue.model';
export const mapGithubIssue = (issue: GithubOriginalIssue): GithubIssue => {
return {

View file

@ -5,7 +5,7 @@ import {
GithubOriginalPullRequest,
GithubOriginalState,
GithubOriginalUser,
} from '../github-api-responses';
} from './github-api-responses';
export type GithubState = GithubOriginalState;
export type GithubUser = GithubOriginalUser;

View file

@ -1,4 +1,4 @@
@import '../../../../../../../variables';
@import 'variables';
// table styled by ./src/styles/components/issue-table.scss

View file

@ -1,15 +1,15 @@
import { ChangeDetectionStrategy, Component, Input, input, inject } from '@angular/core';
import { TaskWithSubTasks } from '../../../../../tasks/task.model';
import { TaskWithSubTasks } from '../../../../tasks/task.model';
import { GitlabIssue } from '../gitlab-issue.model';
import { expandAnimation } from '../../../../../../ui/animations/expand.ani';
import { T } from '../../../../../../t.const';
import { TaskService } from '../../../../../tasks/task.service';
import { expandAnimation } from '../../../../../ui/animations/expand.ani';
import { T } from '../../../../../t.const';
import { TaskService } from '../../../../tasks/task.service';
import { MatButton, MatAnchor } from '@angular/material/button';
import { MatChipListbox, MatChipOption } from '@angular/material/chips';
import { MarkdownComponent, MarkdownPipe } from 'ngx-markdown';
import { MatIcon } from '@angular/material/icon';
import { AsyncPipe, DatePipe } from '@angular/common';
import { SortPipe } from '../../../../../../ui/pipes/sort.pipe';
import { SortPipe } from '../../../../../ui/pipes/sort.pipe';
import { TranslatePipe } from '@ngx-translate/core';
@Component({

View file

@ -24,12 +24,12 @@ import {
reduce,
take,
} from 'rxjs/operators';
import { GitlabIssue } from '../issue/gitlab-issue.model';
import { GitlabIssue } from '../gitlab-issue.model';
import {
getPartsFromGitlabIssueId,
mapGitlabIssue,
mapGitlabIssueToSearchResult,
} from '../issue/gitlab-issue-map.util';
} from '../gitlab-issue-map.util';
import { SearchResultItem } from '../../../issue.model';
import { GITLAB_TYPE, ISSUE_PROVIDER_HUMANIZED } from '../../../issue.const';
import { assertTruthy } from '../../../../../util/assert-truthy';

View file

@ -6,7 +6,7 @@ import { IssueServiceInterface } from '../../issue-service-interface';
import { GitlabApiService } from './gitlab-api/gitlab-api.service';
import { IssueData, IssueProviderGitlab, SearchResultItem } from '../../issue.model';
import { GitlabCfg } from './gitlab.model';
import { GitlabIssue } from './issue/gitlab-issue.model';
import { GitlabIssue } from './gitlab-issue.model';
import { truncate } from '../../../../util/truncate';
import { GITLAB_BASE_URL, GITLAB_POLL_INTERVAL } from './gitlab.const';
import { isGitlabEnabled } from './is-gitlab-enabled.util';

View file

@ -4,7 +4,7 @@ import {
IssueFieldType,
} from '../../issue-content/issue-content.model';
import { IssueProviderKey } from '../../issue.model';
import { GitlabIssue } from './issue/gitlab-issue.model';
import { GitlabIssue } from './gitlab-issue.model';
export const GITLAB_ISSUE_CONTENT_CONFIG: IssueContentConfig<GitlabIssue> = {
issueType: 'GITLAB' as IssueProviderKey,

View file

@ -1,7 +1,7 @@
import { GitlabIssue } from './gitlab-issue.model';
import { GitlabOriginalIssue } from '../gitlab-api/gitlab-api-responses';
import { IssueProviderKey, SearchResultItem } from '../../../issue.model';
import { GitlabCfg } from '../gitlab.model';
import { GitlabOriginalIssue } from './gitlab-api/gitlab-api-responses';
import { IssueProviderKey, SearchResultItem } from '../../issue.model';
import { GitlabCfg } from './gitlab.model';
export const mapGitlabIssue = (
issue: GitlabOriginalIssue,

View file

@ -1,12 +1,12 @@
import { inject, Injectable } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { first } from 'rxjs/operators';
import { GITLAB_TYPE } from '../../../issue.const';
import { IssueProviderService } from '../../../issue-provider.service';
import { TaskCopy } from '../../../../tasks/task.model';
import { DialogGitlabSubmitWorklogForDayComponent } from '../dialog-gitlab-submit-worklog-for-day/dialog-gitlab-submit-worklog-for-day.component';
import { BeforeFinishDayService } from '../../../../before-finish-day/before-finish-day.service';
import { WorkContextService } from '../../../../work-context/work-context.service';
import { GITLAB_TYPE } from '../../issue.const';
import { IssueProviderService } from '../../issue-provider.service';
import { TaskCopy } from '../../../tasks/task.model';
import { DialogGitlabSubmitWorklogForDayComponent } from './dialog-gitlab-submit-worklog-for-day/dialog-gitlab-submit-worklog-for-day.component';
import { BeforeFinishDayService } from '../../../before-finish-day/before-finish-day.service';
import { WorkContextService } from '../../../work-context/work-context.service';
@Injectable()
export class GitlabIssueEffects {

View file

@ -3,7 +3,7 @@ import {
GitlabOriginalIssueState,
GitlabOriginalMilestone,
GitlabOriginalUser,
} from '../gitlab-api/gitlab-api-responses';
} from './gitlab-api/gitlab-api-responses';
export type GitlabState = GitlabOriginalIssueState;
export type GitlabUser = GitlabOriginalUser;

View file

@ -1,4 +1,4 @@
@import '../../../../../../../variables';
@import 'variables';
// table styled by ./src/styles/components/issue-table.scss

View file

@ -1,10 +1,10 @@
import { ChangeDetectionStrategy, Component, Input, inject } from '@angular/core';
import { TaskWithSubTasks } from '../../../../../tasks/task.model';
import { TaskWithSubTasks } from '../../../../tasks/task.model';
import { JiraIssue, JiraRelatedIssue, JiraSubtask } from '../jira-issue.model';
import { expandAnimation } from '../../../../../../ui/animations/expand.ani';
import { TaskAttachment } from '../../../../../tasks/task-attachment/task-attachment.model';
import { T } from '../../../../../../t.const';
import { TaskService } from '../../../../../tasks/task.service';
import { expandAnimation } from '../../../../../ui/animations/expand.ani';
import { TaskAttachment } from '../../../../tasks/task-attachment/task-attachment.model';
import { T } from '../../../../../t.const';
import { TaskService } from '../../../../tasks/task.service';
// @ts-ignore
import j2m from 'jira2md';
import {
@ -17,19 +17,19 @@ import {
Subject,
} from 'rxjs';
import { catchError, map, switchMap } from 'rxjs/operators';
import { JiraCommonInterfacesService } from '../../jira-common-interfaces.service';
import { devError } from '../../../../../../util/dev-error';
import { assertTruthy } from '../../../../../../util/assert-truthy';
import { JiraCommonInterfacesService } from '../jira-common-interfaces.service';
import { devError } from '../../../../../util/dev-error';
import { assertTruthy } from '../../../../../util/assert-truthy';
import { MatButton, MatAnchor } from '@angular/material/button';
import { MatChipListbox, MatChipOption } from '@angular/material/chips';
import { MarkdownComponent, MarkdownPipe } from 'ngx-markdown';
import { MatIcon } from '@angular/material/icon';
import { AsyncPipe, DatePipe } from '@angular/common';
import { JiraToMarkdownPipe } from '../../../../../../ui/pipes/jira-to-markdown.pipe';
import { MsToStringPipe } from '../../../../../../ui/duration/ms-to-string.pipe';
import { SortPipe } from '../../../../../../ui/pipes/sort.pipe';
import { JiraToMarkdownPipe } from '../../../../../ui/pipes/jira-to-markdown.pipe';
import { MsToStringPipe } from '../../../../../ui/duration/ms-to-string.pipe';
import { SortPipe } from '../../../../../ui/pipes/sort.pipe';
import { TranslatePipe } from '@ngx-translate/core';
import { SnackService } from '../../../../../../core/snack/snack.service';
import { SnackService } from '../../../../../core/snack/snack.service';
interface JiraSubtaskWithUrl extends JiraSubtask {
href: string;

View file

@ -14,7 +14,7 @@ import {
mapToSearchResults,
mapToSearchResultsForJQL,
mapTransitionResponse,
} from './issue/jira-issue-map.util';
} from './jira-issue-map.util';
import {
JiraOriginalStatus,
JiraOriginalTransition,
@ -37,7 +37,7 @@ import {
tap,
timeoutWith,
} from 'rxjs/operators';
import { JiraIssue, JiraIssueReduced } from './issue/jira-issue.model';
import { JiraIssue, JiraIssueReduced } from './jira-issue.model';
import moment from 'moment';
import { BannerService } from '../../../../core/banner/banner.service';
import { BannerId } from '../../../../core/banner/banner.model';

View file

@ -5,9 +5,9 @@ import { first, map, switchMap, tap } from 'rxjs/operators';
import { IssueServiceInterface } from '../../issue-service-interface';
import { JiraApiService } from './jira-api.service';
import { IssueProviderJira, SearchResultItem } from '../../issue.model';
import { JiraIssue, JiraIssueReduced } from './issue/jira-issue.model';
import { JiraIssue, JiraIssueReduced } from './jira-issue.model';
import { TaskAttachment } from '../../../tasks/task-attachment/task-attachment.model';
import { mapJiraAttachmentToAttachment } from './issue/jira-issue-map.util';
import { mapJiraAttachmentToAttachment } from './jira-issue-map.util';
import { JiraCfg } from './jira.model';
import { isJiraEnabled } from './is-jira-enabled.util';
import { JIRA_POLL_INTERVAL } from './jira.const';

View file

@ -3,7 +3,7 @@ import {
IssueContentConfig,
IssueFieldType,
} from '../../issue-content/issue-content.model';
import { JiraIssue } from './issue/jira-issue.model';
import { JiraIssue } from './jira-issue.model';
export const JIRA_ISSUE_CONTENT_CONFIG: IssueContentConfig<JiraIssue> = {
issueType: 'JIRA' as const,

View file

@ -16,16 +16,16 @@ import {
JiraOriginalComment,
JiraOriginalIssueLink,
JiraOriginalLinkedIssue,
} from '../jira-api-responses';
import { JiraCfg } from '../jira.model';
} from './jira-api-responses';
import { JiraCfg } from './jira.model';
import {
DropPasteIcons,
DropPasteInputType,
} from '../../../../../core/drop-paste-input/drop-paste.model';
import { IssueProviderKey, SearchResultItem } from '../../../issue.model';
import { TaskAttachment } from '../../../../tasks/task-attachment/task-attachment.model';
import { dedupeByKey } from '../../../../../util/de-dupe-by-key';
import { JIRA_TYPE } from '../../../issue.const';
} from '../../../../core/drop-paste-input/drop-paste.model';
import { IssueProviderKey, SearchResultItem } from '../../issue.model';
import { TaskAttachment } from '../../../tasks/task-attachment/task-attachment.model';
import { dedupeByKey } from '../../../../util/de-dupe-by-key';
import { JIRA_TYPE } from '../../issue.const';
export const mapToSearchResults = (res: any): SearchResultItem[] => {
console.log(res);

View file

@ -11,27 +11,27 @@ import {
throttleTime,
withLatestFrom,
} from 'rxjs/operators';
import { JiraApiService } from '../jira-api.service';
import { JiraApiService } from './jira-api.service';
import { JiraIssueReduced } from './jira-issue.model';
import { SnackService } from '../../../../../core/snack/snack.service';
import { Task } from '../../../../tasks/task.model';
import { TaskService } from '../../../../tasks/task.service';
import { SnackService } from '../../../../core/snack/snack.service';
import { Task } from '../../../tasks/task.model';
import { TaskService } from '../../../tasks/task.service';
import { EMPTY, Observable, of, throwError, timer } from 'rxjs';
import { MatDialog } from '@angular/material/dialog';
import { DialogJiraTransitionComponent } from '../jira-view-components/dialog-jira-transition/dialog-jira-transition.component';
import { IssueLocalState, IssueProviderJira } from '../../../issue.model';
import { IssueService } from '../../../issue.service';
import { JIRA_TYPE } from '../../../issue.const';
import { T } from '../../../../../t.const';
import { JiraTransitionOption } from '../jira.model';
import { setCurrentTask, updateTask } from '../../../../tasks/store/task.actions';
import { DialogJiraAddWorklogComponent } from '../jira-view-components/dialog-jira-add-worklog/dialog-jira-add-worklog.component';
import { selectCurrentTaskParentOrCurrent } from '../../../../tasks/store/task.selectors';
import { HANDLED_ERROR_PROP_STR } from '../../../../../app.constants';
import { DialogConfirmComponent } from '../../../../../ui/dialog-confirm/dialog-confirm.component';
import { isJiraEnabled } from '../is-jira-enabled.util';
import { IssueProviderService } from '../../../issue-provider.service';
import { assertTruthy } from '../../../../../util/assert-truthy';
import { DialogJiraTransitionComponent } from './jira-view-components/dialog-jira-transition/dialog-jira-transition.component';
import { IssueLocalState, IssueProviderJira } from '../../issue.model';
import { IssueService } from '../../issue.service';
import { JIRA_TYPE } from '../../issue.const';
import { T } from '../../../../t.const';
import { JiraTransitionOption } from './jira.model';
import { setCurrentTask, updateTask } from '../../../tasks/store/task.actions';
import { DialogJiraAddWorklogComponent } from './jira-view-components/dialog-jira-add-worklog/dialog-jira-add-worklog.component';
import { selectCurrentTaskParentOrCurrent } from '../../../tasks/store/task.selectors';
import { HANDLED_ERROR_PROP_STR } from '../../../../app.constants';
import { DialogConfirmComponent } from '../../../../ui/dialog-confirm/dialog-confirm.component';
import { isJiraEnabled } from './is-jira-enabled.util';
import { IssueProviderService } from '../../issue-provider.service';
import { assertTruthy } from '../../../../util/assert-truthy';
@Injectable()
export class JiraIssueEffects {

View file

@ -1,6 +1,6 @@
// Mapped Data Types
// -----------------
import { JiraOriginalComponent, JiraOriginalStatus } from '../jira-api-responses';
import { JiraOriginalComponent, JiraOriginalStatus } from './jira-api-responses';
export type JiraAuthor = Readonly<{
id: string;

View file

@ -8,7 +8,7 @@ import {
MatDialogActions,
} from '@angular/material/dialog';
import { SnackService } from '../../../../../../core/snack/snack.service';
import { JiraIssue } from '../../issue/jira-issue.model';
import { JiraIssue } from '../../jira-issue.model';
import { Task } from '../../../../../tasks/task.model';
import { T } from '../../../../../../t.const';
import moment from 'moment';

View file

@ -7,7 +7,7 @@ import {
MatDialogActions,
} from '@angular/material/dialog';
import { IssueLocalState, IssueProviderJira } from '../../../../issue.model';
import { JiraIssueReduced } from '../../issue/jira-issue.model';
import { JiraIssueReduced } from '../../jira-issue.model';
import { Observable, of } from 'rxjs';
import { JiraApiService } from '../../jira-api.service';
import { JiraOriginalTransition } from '../../jira-api-responses';

View file

@ -27,7 +27,7 @@ import {
import { catchError, debounceTime, first, map, switchMap, tap } from 'rxjs/operators';
import { JiraApiService } from '../../jira-api.service';
import { DEFAULT_JIRA_CFG } from '../../jira.const';
import { JiraIssue } from '../../issue/jira-issue.model';
import { JiraIssue } from '../../jira-issue.model';
import { SnackService } from '../../../../../../core/snack/snack.service';
import { T } from '../../../../../../t.const';
import { HelperClasses } from '../../../../../../app.constants';

View file

@ -6,21 +6,21 @@ import {
inject,
ChangeDetectorRef,
} from '@angular/core';
import { TaskWithSubTasks } from '../../../../../tasks/task.model';
import { TaskWithSubTasks } from '../../../../tasks/task.model';
import { OpenProjectWorkPackage } from '../open-project-issue.model';
import { expandAnimation } from '../../../../../../ui/animations/expand.ani';
import { T } from '../../../../../../t.const';
import { TaskService } from '../../../../../tasks/task.service';
import { expandAnimation } from '../../../../../ui/animations/expand.ani';
import { T } from '../../../../../t.const';
import { TaskService } from '../../../../tasks/task.service';
import { MatButton } from '@angular/material/button';
import { MarkdownComponent } from 'ngx-markdown';
import { TranslatePipe } from '@ngx-translate/core';
import { MatIcon } from '@angular/material/icon';
import { TaskAttachment } from '../../../../../tasks/task-attachment/task-attachment.model';
import { IssueProviderService } from '../../../../issue-provider.service';
import { TaskAttachment } from '../../../../tasks/task-attachment/task-attachment.model';
import { IssueProviderService } from '../../../issue-provider.service';
import { mapOpenProjectAttachmentToTaskAttachment } from '../open-project-issue-map.util';
import { MatProgressBar } from '@angular/material/progress-bar';
import { OpenProjectApiService } from '../../open-project-api.service';
import { SnackService } from '../../../../../../core/snack/snack.service';
import { OpenProjectApiService } from '../open-project-api.service';
import { SnackService } from '../../../../../core/snack/snack.service';
import moment from 'moment';
@Component({

View file

@ -2,6 +2,3 @@ import { OpenProjectCfg } from './open-project.model';
export const isOpenProjectEnabled = (cfg: OpenProjectCfg): boolean =>
!!cfg && cfg.isEnabled && !!cfg.host && !!cfg.token && !!cfg.projectId;
export const isOpenProjectEnabledLegacy = (cfg: OpenProjectCfg): boolean =>
!!cfg && !!cfg.host && !!cfg.token && !!cfg.projectId;

View file

@ -13,12 +13,12 @@ import {
mapOpenProjectIssueFull,
mapOpenProjectIssueReduced,
mapOpenProjectIssueToSearchResult,
} from './issue/open-project-issue-map.util';
} from './open-project-issue-map.util';
import {
OpenProjectAttachment,
OpenProjectWorkPackage,
OpenProjectWorkPackageReduced,
} from './issue/open-project-issue.model';
} from './open-project-issue.model';
import { SearchResultItem } from '../../issue.model';
import { T } from '../../../../t.const';
import { throwHandledError } from '../../../../util/throw-handled-error';

View file

@ -9,7 +9,7 @@ import { OpenProjectCfg } from './open-project.model';
import {
OpenProjectWorkPackage,
OpenProjectWorkPackageReduced,
} from './issue/open-project-issue.model';
} from './open-project-issue.model';
import { isOpenProjectEnabled } from './is-open-project-enabled.util';
import { OPEN_PROJECT_POLL_INTERVAL } from './open-project.const';
import { parseOpenProjectDuration } from './open-project-view-components/parse-open-project-duration.util';

View file

@ -4,7 +4,7 @@ import {
IssueFieldType,
} from '../../issue-content/issue-content.model';
import { IssueProviderKey } from '../../issue.model';
import { OpenProjectWorkPackage } from './issue/open-project-issue.model';
import { OpenProjectWorkPackage } from './open-project-issue.model';
export const OPEN_PROJECT_ISSUE_CONTENT_CONFIG: IssueContentConfig<OpenProjectWorkPackage> =
{

View file

@ -6,15 +6,15 @@ import {
import {
OpenProjectOriginalWorkPackageFull,
OpenProjectOriginalWorkPackageReduced,
} from '../open-project-api-responses';
import { SearchResultItem } from '../../../issue.model';
import { OpenProjectCfg } from '../open-project.model';
import { OPEN_PROJECT_TYPE } from '../../../issue.const';
} from './open-project-api-responses';
import { SearchResultItem } from '../../issue.model';
import { OpenProjectCfg } from './open-project.model';
import { OPEN_PROJECT_TYPE } from '../../issue.const';
import {
TaskAttachment,
TaskAttachmentCopy,
} from '../../../../tasks/task-attachment/task-attachment.model';
import { DropPasteIcons } from '../../../../../core/drop-paste-input/drop-paste.model';
} from '../../../tasks/task-attachment/task-attachment.model';
import { DropPasteIcons } from '../../../../core/drop-paste-input/drop-paste.model';
export const mapOpenProjectIssueReduced = (
issue: OpenProjectOriginalWorkPackageReduced,

View file

@ -1,7 +1,7 @@
import {
OpenProjectOriginalWorkPackageFull,
OpenProjectOriginalWorkPackageReduced,
} from '../open-project-api-responses';
} from './open-project-api-responses';
export interface OpenProjectAttachment {
id: number;

View file

@ -11,7 +11,7 @@ import { SnackService } from '../../../../../../core/snack/snack.service';
import { Task } from '../../../../../tasks/task.model';
import { T } from '../../../../../../t.const';
import moment from 'moment';
import { OpenProjectWorkPackage } from '../../issue/open-project-issue.model';
import { OpenProjectWorkPackage } from '../../open-project-issue.model';
import { parseOpenProjectDuration } from '../parse-open-project-duration.util';
import { JiraWorklogExportDefaultTime } from '../../../jira/jira.model';
import {

View file

@ -18,7 +18,7 @@ import { T } from 'src/app/t.const';
import { Task } from '../../../../../tasks/task.model';
import { OpenProjectOriginalStatus } from '../../open-project-api-responses';
import { OpenProjectApiService } from '../../open-project-api.service';
import { OpenProjectWorkPackage } from '../../issue/open-project-issue.model';
import { OpenProjectWorkPackage } from '../../open-project-issue.model';
import { IssueProviderService } from 'src/app/features/issue/issue-provider.service';
import { assertTruthy } from '../../../../../../util/assert-truthy';
import { FormsModule } from '@angular/forms';

View file

@ -29,7 +29,7 @@ import { OpenProjectApiService } from '../../open-project-api.service';
import {
OpenProjectWorkPackage,
OpenProjectWorkPackageReduced,
} from '../../issue/open-project-issue.model';
} from '../../open-project-issue.model';
import { DEFAULT_OPEN_PROJECT_CFG } from '../../open-project.const';
import {
OpenProjectTransitionConfig,

View file

@ -1,26 +1,26 @@
import { Injectable, inject } from '@angular/core';
import { Actions, createEffect, ofType } from '@ngrx/effects';
import { setCurrentTask, updateTask } from '../../../../../tasks/store/task.actions';
import { setCurrentTask, updateTask } from '../../../tasks/store/task.actions';
import { concatMap, filter, map, take, tap, withLatestFrom } from 'rxjs/operators';
import { select, Store } from '@ngrx/store';
import { OPEN_PROJECT_TYPE } from '../../../../issue.const';
import { OPEN_PROJECT_TYPE } from '../../issue.const';
import { MatDialog } from '@angular/material/dialog';
import { Task } from '../../../../../tasks/task.model';
import { OpenProjectCfg, OpenProjectTransitionOption } from '../../open-project.model';
import { Task } from '../../../tasks/task.model';
import { OpenProjectCfg, OpenProjectTransitionOption } from './open-project.model';
import { EMPTY, Observable, of, timer } from 'rxjs';
import { DialogOpenProjectTrackTimeComponent } from '../../open-project-view-components/dialog-open-project-track-time/dialog-open-project-track-time.component';
import { OpenProjectApiService } from '../../open-project-api.service';
import { TaskService } from '../../../../../tasks/task.service';
import { DialogOpenProjectTrackTimeComponent } from './open-project-view-components/dialog-open-project-track-time/dialog-open-project-track-time.component';
import { OpenProjectApiService } from './open-project-api.service';
import { TaskService } from '../../../tasks/task.service';
import { selectCurrentTaskParentOrCurrent } from 'src/app/features/tasks/store/task.selectors';
import { isOpenProjectEnabled } from '../../is-open-project-enabled.util';
import { isOpenProjectEnabled } from './is-open-project-enabled.util';
import { IssueLocalState } from 'src/app/features/issue/issue.model';
import { SnackService } from 'src/app/core/snack/snack.service';
import { OpenProjectWorkPackage } from '../open-project-issue.model';
import { OpenProjectWorkPackage } from './open-project-issue.model';
import { IssueService } from 'src/app/features/issue/issue.service';
import { T } from 'src/app/t.const';
import { DialogOpenProjectTransitionComponent } from '../../open-project-view-components/dialog-openproject-transition/dialog-open-project-transition.component';
import { IssueProviderService } from '../../../../issue-provider.service';
import { assertTruthy } from '../../../../../../util/assert-truthy';
import { DialogOpenProjectTransitionComponent } from './open-project-view-components/dialog-openproject-transition/dialog-open-project-transition.component';
import { IssueProviderService } from '../../issue-provider.service';
import { assertTruthy } from '../../../../util/assert-truthy';
@Injectable()
export class OpenProjectEffects {

View file

@ -1,4 +1,4 @@
import { RedmineIssue } from './issue/redmine-issue.model';
import { RedmineIssue } from './redmine-issue.model';
import { truncate } from '../../../../util/truncate';
export const formatRedmineIssueSubject = ({ id, subject }: RedmineIssue): string => {

View file

@ -12,8 +12,8 @@ import {
RedmineIssueResult,
RedmineSearchResult,
RedmineSearchResultItem,
} from './issue/redmine-issue.model';
import { mapRedmineSearchResultItemToSearchResult } from './issue/redmine-issue-map.util';
} from './redmine-issue.model';
import { mapRedmineSearchResultItemToSearchResult } from './redmine-issue-map.util';
import { SearchResultItem } from '../../issue.model';
import { ScopeOptions } from './redmine.const';
import { handleIssueProviderHttpError$ } from '../../handle-issue-provider-http-error';

View file

@ -17,7 +17,7 @@ import {
import { RedmineCfg } from './redmine.model';
import { isRedmineEnabled } from './is-redmine-enabled.util';
import { RedmineApiService } from '../redmine/redmine-api.service';
import { RedmineIssue } from './issue/redmine-issue.model';
import { RedmineIssue } from './redmine-issue.model';
import { IssueProviderService } from '../../issue-provider.service';
@Injectable({

View file

@ -3,7 +3,7 @@ import {
IssueContentConfig,
IssueFieldType,
} from '../../issue-content/issue-content.model';
import { RedmineIssue } from './issue/redmine-issue.model';
import { RedmineIssue } from './redmine-issue.model';
import { IssueProviderKey } from '../../issue.model';
export const REDMINE_ISSUE_CONTENT_CONFIG: IssueContentConfig<RedmineIssue> = {

View file

@ -1,8 +1,4 @@
import {
IssueDataReduced,
IssueProviderKey,
SearchResultItem,
} from '../../../issue.model';
import { IssueDataReduced, IssueProviderKey, SearchResultItem } from '../../issue.model';
import { RedmineSearchResultItem } from './redmine-issue.model';
export const mapRedmineSearchResultItemToSearchResult = (

View file

@ -161,7 +161,6 @@
#autoEl="matAutocomplete"
(optionActivated)="onOptionActivated($event?.option?.value)"
(optionSelected)="addTask()"
[displayWith]="displayWith"
>
@for (
item of filteredIssueSuggestions$ | async;

View file

@ -12,7 +12,6 @@ import {
} from '@angular/core';
import { FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
import { TaskService } from '../task.service';
import { JiraIssue } from '../../issue/providers/jira/jira-issue/jira-issue.model';
import { BehaviorSubject, Observable } from 'rxjs';
import { T } from '../../../t.const';
import { AddTaskSuggestion } from './add-task-suggestions.model';
@ -255,10 +254,6 @@ export class AddTaskBarComponent implements AfterViewInit, OnDestroy {
}
}
displayWith(issue?: JiraIssue): string | undefined {
return issue?.summary;
}
async addTask(): Promise<void> {
this._isAddInProgress = true;
const item: AddTaskSuggestion | string = this.taskSuggestionsCtrl.value;

View file

@ -74,15 +74,15 @@ import { workContextReducer } from '../features/work-context/store/work-context.
import { WorkContextEffects } from '../features/work-context/store/work-context.effects';
import { IS_ANDROID_WEB_VIEW } from '../util/is-android-web-view';
import { AndroidEffects } from '../features/android/store/android.effects';
import { CaldavIssueEffects } from '../features/issue/providers/caldav/caldav-issue/caldav-issue.effects';
import { CaldavIssueEffects } from '../features/issue/providers/caldav/caldav-issue.effects';
import { CalendarIntegrationEffects } from '../features/calendar-integration/store/calendar-integration.effects';
import { ElectronEffects } from '../core/electron/electron.effects';
import { DominaModeEffects } from '../features/domina-mode/store/domina-mode.effects';
import { DropboxEffects } from '../imex/sync/dropbox/store/dropbox.effects';
import { FinishDayBeforeCloseEffects } from '../features/finish-day-before-close/finish-day-before-close.effects';
import { GitlabIssueEffects } from '../features/issue/providers/gitlab/gitlab-issue/gitlab-issue.effects';
import { JiraIssueEffects } from '../features/issue/providers/jira/jira-issue/jira-issue.effects';
import { OpenProjectEffects } from '../features/issue/providers/open-project/open-project-issue/store/open-project.effects';
import { GitlabIssueEffects } from '../features/issue/providers/gitlab/gitlab-issue.effects';
import { JiraIssueEffects } from '../features/issue/providers/jira/jira-issue.effects';
import { OpenProjectEffects } from '../features/issue/providers/open-project/open-project.effects';
import { ReminderCountdownEffects } from '../features/reminder/store/reminder-countdown.effects';
import { SyncEffects } from '../imex/sync/sync.effects';
import { boardsFeature } from '../features/boards/store/boards.reducer';