Skip to content

Commit 8431d60

Browse files
committed
fix(web): manage Linear accounts by project
1 parent c742935 commit 8431d60

19 files changed

Lines changed: 663 additions & 90 deletions

apps/web/src/components/ChatView.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3363,7 +3363,10 @@ function ChatViewContent(props: ChatViewProps) {
33633363
* same number would be worse than not opening it at all.
33643364
*/
33653365
const openLinkedItem = useCallback(
3366-
(kind: "issue" | "pull-request", link: { repository: string; number: number; url: string }) => {
3366+
(
3367+
kind: "issue" | "pull-request",
3368+
link: { provider?: string; repository: string; number: number; url: string },
3369+
) => {
33673370
const supported = kind === "issue" ? supportsIssues : supportsPullRequests;
33683371
const project =
33693372
activeThreadEnvironmentId === null
@@ -3380,6 +3383,7 @@ function ChatViewContent(props: ChatViewProps) {
33803383
}
33813384
const reference = {
33823385
projectId: project.id,
3386+
...(kind === "issue" && link.provider !== undefined ? { provider: link.provider } : {}),
33833387
repository: repositoryForProjectLink(project, link.repository),
33843388
number: link.number,
33853389
};
@@ -3393,7 +3397,8 @@ function ChatViewContent(props: ChatViewProps) {
33933397
[activeThreadEnvironmentId, activeThreadRef, allProjects, supportsIssues, supportsPullRequests],
33943398
);
33953399
const openLinkedIssue = useCallback(
3396-
(link: { repository: string; number: number; url: string }) => openLinkedItem("issue", link),
3400+
(link: { provider?: string; repository: string; number: number; url: string }) =>
3401+
openLinkedItem("issue", link),
33973402
[openLinkedItem],
33983403
);
33993404
const openLinkedPullRequest = useCallback(
@@ -4223,7 +4228,9 @@ function ChatViewContent(props: ChatViewProps) {
42234228
useRightPanelStore.getState().openIssues(activeThreadRef);
42244229
}, [activeThreadRef]);
42254230
const selectIssueInPanel = useCallback(
4226-
(target: { projectId: string; repository: string; number: number } | null) => {
4231+
(
4232+
target: { projectId: string; provider?: string; repository: string; number: number } | null,
4233+
) => {
42274234
if (!activeThreadRef) return;
42284235
useRightPanelStore.getState().selectIssueInPanel(activeThreadRef, target);
42294236
},
@@ -6269,10 +6276,13 @@ function ChatViewContent(props: ChatViewProps) {
62696276
// into the thread this panel is open beside, so reading an issue and acting on it stay one
62706277
// conversation instead of stranding the reader in a thread they did not ask for.
62716278
<IssueDetailPanel
6272-
key={`${activeRightPanelSurface.repository}#${activeRightPanelSurface.number}`}
6279+
key={activeRightPanelSurface.id}
62736280
environmentId={activeThread.environmentId}
62746281
reference={{
62756282
projectId: activeRightPanelSurface.projectId as ProjectId,
6283+
...(activeRightPanelSurface.provider === undefined
6284+
? {}
6285+
: { provider: activeRightPanelSurface.provider }),
62766286
repository: activeRightPanelSurface.repository,
62776287
number: activeRightPanelSurface.number,
62786288
}}

apps/web/src/components/issue/IssueSummaryTab.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,12 @@ export function IssueSummaryTab({
193193
const aiMatches = useWorkItemMatches({
194194
environmentId,
195195
projectId: reference.projectId,
196-
source: { kind: "issue", repository: reference.repository, number: reference.number },
196+
source: {
197+
kind: "issue",
198+
...(reference.provider === undefined ? {} : { provider: reference.provider }),
199+
repository: reference.repository,
200+
number: reference.number,
201+
},
197202
version: detail.updatedAt,
198203
});
199204
const shownComments = shown.url === detail.url ? shown.count : COMMENT_PAGE;

apps/web/src/components/issue/IssuesPanel.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,11 @@ function ProjectIssues({
147147
{/* Hand-offs land in the thread this panel sits beside, so reading an issue and acting
148148
on it stay one conversation. */}
149149
<IssueDetailPanel
150-
key={`${selected.repository}#${selected.number}`}
150+
key={`${selected.provider ?? ""}:${selected.repository}#${selected.number}`}
151151
environmentId={environmentId}
152152
reference={{
153153
projectId: selected.projectId as ProjectId,
154+
...(selected.provider === undefined ? {} : { provider: selected.provider }),
154155
repository: selected.repository,
155156
number: selected.number,
156157
}}
@@ -369,7 +370,12 @@ function IssueBrowserList({
369370
// Stable, because the rows are memoized on it.
370371
const select = useCallback(
371372
(entry: IssueListEntry) =>
372-
onSelect({ projectId, repository: entry.repository, number: entry.number }),
373+
onSelect({
374+
projectId,
375+
provider: entry.provider,
376+
repository: entry.repository,
377+
number: entry.number,
378+
}),
373379
[onSelect, projectId],
374380
);
375381

0 commit comments

Comments
 (0)