Skip to content

Commit 21890a0

Browse files
committed
Supports Jira issues in Start Work flow
(#3621)
1 parent 937b1cc commit 21890a0

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

src/plus/integrations/integrationService.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ export class IntegrationService implements Disposable {
554554
args: { 0: integrationIds => (integrationIds?.length ? integrationIds.join(',') : '<undefined>'), 1: false },
555555
})
556556
async getMyIssues(
557-
integrationIds?: HostingIntegrationId[],
557+
integrationIds?: (SupportedHostingIntegrationIds | SupportedIssueIntegrationIds)[],
558558
cancellation?: CancellationToken,
559559
): Promise<SearchedIssue[] | undefined> {
560560
const integrations: Map<Integration, ResourceDescriptor[] | undefined> = new Map();

src/plus/startWork/startWork.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@ import { OpenOnGitHubQuickInputButton } from '../../commands/quickCommand.button
2121
import { getSteps } from '../../commands/quickWizard.utils';
2222
import { proBadge } from '../../constants';
2323
import type { IntegrationId } from '../../constants.integrations';
24-
import { HostingIntegrationId } from '../../constants.integrations';
24+
import { HostingIntegrationId, IssueIntegrationId } from '../../constants.integrations';
2525
import type { Source, Sources, StartWorkTelemetryContext } from '../../constants.telemetry';
2626
import type { Container } from '../../container';
27-
import type { SearchedIssue } from '../../git/models/issue';
27+
import type { Issue, IssueShape, SearchedIssue } from '../../git/models/issue';
2828
import { getOrOpenIssueRepository } from '../../git/models/issue';
29+
import type { Repository } from '../../git/models/repository';
2930
import type { QuickPickItemOfT } from '../../quickpicks/items/common';
3031
import { createQuickPickItemOfT } from '../../quickpicks/items/common';
3132
import type { DirectiveQuickPickItem } from '../../quickpicks/items/directive';
@@ -67,7 +68,7 @@ export interface StartWorkCommandArgs {
6768
source?: Sources;
6869
}
6970

70-
export const supportedStartWorkIntegrations = [HostingIntegrationId.GitHub];
71+
export const supportedStartWorkIntegrations = [HostingIntegrationId.GitHub, IssueIntegrationId.Jira];
7172
const instanceCounter = getScopedCounter();
7273

7374
export class StartWorkCommand extends QuickCommand<State> {
@@ -147,7 +148,7 @@ export class StartWorkCommand extends QuickCommand<State> {
147148
}
148149

149150
const issue = state.item?.item?.issue;
150-
const repo = issue && (await getOrOpenIssueRepository(this.container, issue));
151+
const repo = issue && (await this.getIssueRepositoryIfExists(issue));
151152

152153
if (typeof state.action === 'string') {
153154
switch (state.action) {
@@ -159,7 +160,9 @@ export class StartWorkCommand extends QuickCommand<State> {
159160
state: {
160161
subcommand: 'create',
161162
repo: repo,
162-
name: issue ? slug(`${issue.id}-${issue.title}`) : undefined,
163+
name: issue
164+
? `${slug(issue.id, { lower: false })}-${slug(issue.title)}`
165+
: undefined,
163166
suggestNameOnly: true,
164167
suggestRepoOnly: true,
165168
flags: state.inWorktree ? ['--worktree'] : ['--switch'],
@@ -201,6 +204,14 @@ export class StartWorkCommand extends QuickCommand<State> {
201204
return canPickStepContinue(step, state, selection) ? selection[0].item : StepResultBreak;
202205
}
203206

207+
private async getIssueRepositoryIfExists(issue: IssueShape | Issue): Promise<Repository | undefined> {
208+
try {
209+
return await getOrOpenIssueRepository(this.container, issue);
210+
} catch {
211+
return undefined;
212+
}
213+
}
214+
204215
private async *confirmLocalIntegrationConnectStep(
205216
state: StepState<State>,
206217
context: Context,
@@ -439,7 +450,7 @@ export class StartWorkCommand extends QuickCommand<State> {
439450
async function updateContextItems(container: Container, context: Context) {
440451
context.result = {
441452
items:
442-
(await container.integrations.getMyIssues([HostingIntegrationId.GitHub]))?.map(i => ({
453+
(await container.integrations.getMyIssues(supportedStartWorkIntegrations))?.map(i => ({
443454
item: i,
444455
})) ?? [],
445456
};

0 commit comments

Comments
 (0)