Skip to content

Commit

Permalink
feat(jira): improve issue search
Browse files Browse the repository at this point in the history
  • Loading branch information
johannesjo committed Mar 17, 2019
1 parent 57ce69d commit 8d1c51d
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 39 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@
"electron-localshortcut": "^3.1.0",
"electron-log": "^3.0.1",
"googleapis": "^34.0.0",
"jira-client-fork": "^4.2.0",
"jira-client-fork": "^4.2.1",
"moment-mini": "^2.22.1",
"node-notifier": "^5.3.0"
},
Expand Down
1 change: 1 addition & 0 deletions src/app/features/issue/issue.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ export interface SearchResultItem {
title: string;
issueType: IssueProviderKey;
issueData: IssueData;
titleHighlighted?: string;
}
2 changes: 1 addition & 1 deletion src/app/features/issue/issue.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export class IssueService {

if (isSearchJira) {
obs.push(
this._jiraApiService.search(searchTerm, false, 50)
this._jiraApiService.issuePicker(searchTerm, false, 50)
.pipe(
catchError(() => {
return [];
Expand Down
11 changes: 11 additions & 0 deletions src/app/features/issue/jira/jira-api.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,17 @@ export class JiraApiService {
});
}

issuePicker(searchTerm: string): Observable<SearchResultItem[]> {
const searchStr = `${searchTerm}`;
const jql = (this._cfg.searchJqlQuery ? `${encodeURI(this._cfg.searchJqlQuery)}` : '');

return this._sendRequest({
apiMethod: 'issuePicker',
arguments: [searchStr, jql],
transform: mapToSearchResults
});
}

findAutoImportIssues(isFetchAdditional?: boolean, maxResults: number = JIRA_MAX_RESULTS): Observable<JiraIssue[]> {
const options = {
maxResults: maxResults,
Expand Down
35 changes: 22 additions & 13 deletions src/app/features/issue/jira/jira-issue/jira-issue-map.util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,35 @@ import {
JiraOriginalComment
} from '../jira-api-responses';
import { JiraCfg } from '../jira';
import { DropPasteIcons, DropPasteInput, DropPasteInputType } from '../../../../core/drop-paste-input/drop-paste-input';
import { DropPasteIcons, DropPasteInputType } from '../../../../core/drop-paste-input/drop-paste-input';
import { IssueProviderKey, SearchResultItem } from '../../issue';
import { Attachment } from '../../../attachment/attachment.model';
import { dedupeByKey } from '../../../../util/de-dupe-by-key';

const matchProtocolRegEx = /(^[^:]+):\/\//;

export const mapToSearchResults = (res, cfg: JiraCfg): SearchResultItem[] => {
const issues = mapIssuesResponse(res, cfg);
return issues.map(issue => {
return {
title: issue.key + ' ' + issue.summary,
issueType: 'JIRA' as IssueProviderKey,
issueData: issue,
};
});
export const mapToSearchResults = (res): SearchResultItem[] => {
const issues = dedupeByKey(res.response.sections.map(sec => sec.issues).flat(), 'key')
.map(issue => {
return {
title: issue.key + ' ' + issue.summaryText,
titleHighlighted: issue.key + ' ' + issue.summary,
issueType: 'JIRA' as IssueProviderKey,
issueData: {
...issue,
summary: issue.summaryText,
id: issue.key,
},
};
});
return issues;
};

export const mapIssuesResponse = (res, cfg: JiraCfg): JiraIssue[] => res.response.issues.map((issue) => {
return mapIssue(issue, cfg);
});
export const mapIssuesResponse = (res, cfg: JiraCfg): JiraIssue[] => {
return res.response.issues.map((issue) => {
return mapIssue(issue, cfg);
});
};

export const mapResponse = (res) => res.response;

Expand Down
15 changes: 0 additions & 15 deletions src/app/features/issue/jira/jira-issue/store/jira-issue.effects.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,21 +110,6 @@ export class JiraIssueEffects {
);


@Effect({dispatch: false}) updateIssueRightAwayWithCompleteData$: any = this._actions$
.pipe(
ofType(
TaskActionTypes.AddTask,
),
withLatestFrom(
this._store$.pipe(select(selectProjectJiraCfg)),
),
filter(isEnabled),
filter(([a, jiraCfg]: [AddTask, JiraCfg]) => !!a.payload.issue && a.payload.task.issueType === JIRA_TYPE),
tap(([a, jiraCfg]: [AddTask, JiraCfg]) => this._jiraIssueService.updateIssueFromApi(
a.payload.issue.id, null, false, false
)),
);

@Effect({dispatch: false}) addWorklog$: any = this._actions$
.pipe(
ofType(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
<mat-option *ngFor="let issue of (filteredIssueSuggestions$|async)"
[value]="issue">
<mat-icon [svgIcon]="issue.issueType|issueIcon"></mat-icon>
<span>{{issue?.title}}</span>
<span [innerHTML]="issue?.titleHighlighted||issue?.title"></span>
</mat-option>

</mat-autocomplete>
Expand Down
20 changes: 17 additions & 3 deletions src/app/features/tasks/add-task-bar/add-task-bar.component.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
import { AfterViewInit, ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import {
AfterViewInit,
ChangeDetectionStrategy,
Component,
EventEmitter,
Input,
Output,
ViewChild
} from '@angular/core';
import { FormControl } from '@angular/forms';
import { TaskService } from '../task.service';
import { debounceTime, switchMap, tap } from 'rxjs/operators';
Expand All @@ -7,6 +15,8 @@ import { BehaviorSubject, Observable } from 'rxjs';
import { IssueService } from '../../issue/issue.service';
import { SearchResultItem } from '../../issue/issue';
import { SnackService } from '../../../core/snack/snack.service';
import { JiraApiService } from '../../issue/jira/jira-api.service';
import { JIRA_TYPE } from '../../issue/issue.const';

@Component({
selector: 'add-task-bar',
Expand Down Expand Up @@ -46,6 +56,7 @@ export class AddTaskBarComponent implements AfterViewInit {
constructor(
private _taskService: TaskService,
private _issueService: IssueService,
private _jiraApiService: JiraApiService,
private _snackService: SnackService,
) {
}
Expand Down Expand Up @@ -95,13 +106,16 @@ export class AddTaskBarComponent implements AfterViewInit {
this.doubleEnterCount++;
}
} else {
const res = await this._taskService.checkForTaskWithIssue(issueOrTitle.issueData);
const issueData = (issueOrTitle.issueType === JIRA_TYPE)
? await this._jiraApiService.getIssueById(issueOrTitle.issueData.id).toPromise()
: issueOrTitle.issueData;

const res = await this._taskService.checkForTaskWithIssue(issueData);
if (!res) {
this._taskService.addWithIssue(
issueOrTitle.title,
issueOrTitle.issueType,
issueOrTitle.issueData,
issueData,
this.isAddToBacklog,
);
} else if (res.isFromArchive) {
Expand Down
11 changes: 6 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@
dependencies:
tslib "^1.9.0"

"@angular/cdk@^7.3.4":
"@angular/cdk@^7.3.2":
version "7.3.4"
resolved "https://registry.yarnpkg.com/@angular/cdk/-/cdk-7.3.4.tgz#b9d8c62cdd24fa6517dd3ae68c78632b1525d35f"
integrity sha512-cHl1o7obogCO3Nxf9n8MrXpfHa7AH1QNX2BY+bftYBTHW++YJe+qAwkwWLVqnJD9TQE2OpiR058zoJU20khM/g==
Expand Down Expand Up @@ -215,7 +215,7 @@
resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-7.2.9.tgz#50a74f80a42b069c6a3a0844ee6af3098f8bd48b"
integrity sha512-+8P3yGqrCZy8PaoxUUlC6cowxPAIbuW4HwhvHvYV3G99LDQUC/bxUPSPhqbrAvDiFr3VeXqivzXgFCTo69S1WQ==

"@angular/material@^7.3.4":
"@angular/material@^7.3.2":
version "7.3.4"
resolved "https://registry.yarnpkg.com/@angular/material/-/material-7.3.4.tgz#a0d3fc14bf4c165944e3f1ddc71f7c685b8d4ef3"
integrity sha512-UWS4Kd3AqJBtAJRds4hhPNez9k1rkWhd6/E17pfcH6KWxP3Pi7tcubaSqoDRGHVbr/QegDn1SOoRokJxLYDn2g==
Expand Down Expand Up @@ -4017,9 +4017,10 @@ jasminewd2@^2.1.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e"

jira-client-fork@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/jira-client-fork/-/jira-client-fork-4.2.0.tgz#e5ade1400a029480e94bf5a47132c82c6e4d627a"
jira-client-fork@^4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/jira-client-fork/-/jira-client-fork-4.2.1.tgz#ceb6f6be1c96d2c1989d1ac3a78292b6bd83f284"
integrity sha512-OnHUdAMB07MCbkbXJbNFIKjikY9HTNpRPuas2pninstHUQ8PT54tUFUQtFmNhwTFWQH6UYvnKJV+yDaY1PxVyA==
dependencies:
babel-runtime "^6.3.13"
request-promise "^3.0.0"
Expand Down

0 comments on commit 8d1c51d

Please sign in to comment.