Skip to content

Commit a7206b5

Browse files
committed
Fixes showing associated branch Linear issues on Home View
(#4543, #4579)
1 parent 93f1ebd commit a7206b5

File tree

6 files changed

+41
-8
lines changed

6 files changed

+41
-8
lines changed

src/git/models/issue.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ export class Issue implements IssueShape {
3737
public readonly thumbsUpCount?: number,
3838
public readonly body?: string,
3939
public readonly project?: IssueProject,
40+
public readonly number?: string,
4041
) {}
4142
}
4243

src/plus/integrations/providers/linear.ts

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ import type { Account } from '../../../git/models/author';
44
import type { Issue, IssueShape } from '../../../git/models/issue';
55
import type { IssueOrPullRequest, IssueOrPullRequestType } from '../../../git/models/issueOrPullRequest';
66
import type { IssueResourceDescriptor, ResourceDescriptor } from '../../../git/models/resourceDescriptor';
7+
import { isIssueResourceDescriptor } from '../../../git/utils/resourceDescriptor.utils';
78
import { Logger } from '../../../system/logger';
89
import type { IntegrationAuthenticationProviderDescriptor } from '../authentication/integrationAuthenticationProvider';
910
import type { ProviderAuthenticationSession } from '../authentication/models';
1011
import { IssuesIntegration } from '../models/issuesIntegration';
1112
import type { IssueFilter } from './models';
12-
import { providersMetadata, toIssueShape } from './models';
13+
import { fromProviderIssue, providersMetadata, toIssueShape } from './models';
1314

1415
const metadata = providersMetadata[IssuesCloudHostIntegrationId.Linear];
1516
const authProvider = Object.freeze({ id: metadata.id, scopes: metadata.scopes });
@@ -110,11 +111,35 @@ export class LinearIntegration extends IssuesIntegration<IssuesCloudHostIntegrat
110111
): Promise<IssueOrPullRequest | undefined> {
111112
throw new Error('Method not implemented.');
112113
}
113-
protected override getProviderIssue(
114-
_session: ProviderAuthenticationSession,
115-
_resource: ResourceDescriptor,
116-
_id: string,
114+
protected override async getProviderIssue(
115+
session: ProviderAuthenticationSession,
116+
resource: ResourceDescriptor,
117+
id: string,
117118
): Promise<Issue | undefined> {
118-
throw new Error('Method not implemented.');
119+
const api = await this.getProvidersApi();
120+
try {
121+
if (!isIssueResourceDescriptor(resource)) {
122+
Logger.error(undefined, 'getProviderIssue: resource is not an IssueResourceDescriptor');
123+
return undefined;
124+
}
125+
126+
const result = await api.getIssue(
127+
this.id,
128+
{
129+
resourceId: resource.id,
130+
number: id,
131+
},
132+
{
133+
accessToken: session.accessToken,
134+
},
135+
);
136+
137+
if (result == null) return undefined;
138+
139+
return fromProviderIssue(result, this);
140+
} catch (ex) {
141+
Logger.error(ex, 'getProviderIssue');
142+
return undefined;
143+
}
119144
}
120145
}

src/plus/integrations/providers/models.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1055,6 +1055,7 @@ export function fromProviderIssue(
10551055
resourceName: issue.project.namespace,
10561056
}
10571057
: undefined,
1058+
issue.number,
10581059
);
10591060
}
10601061

src/plus/integrations/providers/providersApi.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ export class ProvidersApi {
326326
[IssuesCloudHostIntegrationId.Linear]: {
327327
...providersMetadata[IssuesCloudHostIntegrationId.Linear],
328328
provider: providerApis.linear,
329+
getIssueFn: providerApis.linear.getIssue.bind(providerApis.linear) as GetIssueFn,
329330
getIssuesForCurrentUserFn: providerApis.linear.getIssuesForCurrentUser.bind(providerApis.linear),
330331
},
331332
[IssuesCloudHostIntegrationId.Trello]: {

src/webviews/apps/plus/home/components/branch-card.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,7 @@ export abstract class GlBranchCardBase extends GlElement {
567567
<issue-icon state=${issue.state} issue-id=${issue.id}></issue-icon>
568568
</span>
569569
<a href=${issue.url} class="branch-item__name branch-item__name--secondary">${issue.title}</a>
570-
<span class="branch-item__identifier">#${issue.id}</span>
570+
<span class="branch-item__identifier">${isNaN(parseInt(issue.id)) ? '' : '#'}${issue.id}</span>
571571
</p>
572572
`;
573573
})}

src/webviews/home/homeWebview.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1808,7 +1808,12 @@ function enrichOverviewBranchesCore(
18081808
issues =>
18091809
issues?.map(
18101810
i =>
1811-
({ id: i.id, title: i.title, state: i.state, url: i.url }) satisfies NonNullable<IssuesInfo>[0],
1811+
({
1812+
id: i.number || i.id,
1813+
title: i.title,
1814+
state: i.state,
1815+
url: i.url,
1816+
}) satisfies NonNullable<IssuesInfo>[0],
18121817
) ?? [],
18131818
);
18141819

0 commit comments

Comments
 (0)