Skip to content

Commit 68c51c9

Browse files
committed
fix(BrowserLoadFragment): move to other issue with anchor link
1 parent 9d65702 commit 68c51c9

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

src/Renderer/Fragment/Browser/BrowserLoadFragment.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,10 @@ export class BrowserLoadFragment extends React.Component<Props, State> {
123123

124124
private setupPageLoading() {
125125
BrowserViewIPC.onEventDidStartNavigation(async (_ev, url, inPage) => {
126-
// ページ内遷移(アンカーやSPA的な遷移)ではissue選択を移動しない
127-
if (inPage) return;
126+
// inPageはアンカーやSPA的な遷移でtrueとなる
127+
// issueから別のissueに遷移したとき、先読みされている場合はSPA的な遷移になる(同じリポジトリの場合など)
128+
// なので、inPageだからといって、ハンドリングをキャンセルするわけにないかない
129+
// if (inPage) return;
128130

129131
// issueを選択したときに、なぜか直前に選択していたissueのdid-start-navigationが発行されてしまう
130132
// electronの不具合なのか、IPC通してイベントを受け取っているのがだめなのかよくわからない

src/Renderer/Library/Util/GitHubUtil.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ import {color} from '../Style/color';
44

55
class _GitHubUtil {
66
getInfo(url: string): {repo: string; issueNumber: number, user: string, repoOrg: string, repoName: string} {
7-
const urlPaths = url.split('/').reverse();
7+
const urlObj = new URL(url);
8+
const pathname = urlObj.pathname;
9+
10+
const urlPaths = pathname.split('/').reverse();
811
const repoOrg = urlPaths[3];
912
const repoName = urlPaths[2];
1013
const repo = `${repoOrg}/${repoName}`;
@@ -30,16 +33,22 @@ class _GitHubUtil {
3033
isIssueUrl(host: string, url: string): boolean {
3134
if (!url) return false;
3235

33-
let isIssue = !!url.match(new RegExp(`^https://${host}/[\\w\\d-_.]+/[\\w\\d-_.]+/issues/\\d+$`));
34-
let isPR = !!url.match(new RegExp(`^https://${host}/[\\w\\d-_.]+/[\\w\\d-_.]+/pull/\\d+$`));
36+
const urlObj = new URL(url);
37+
if (urlObj.host !== host) return false;
38+
39+
const isIssue = !!urlObj.pathname.match(new RegExp(`^/[\\w\\d-_.]+/[\\w\\d-_.]+/issues/\\d+$`));
40+
const isPR = !!urlObj.pathname.match(new RegExp(`^/[\\w\\d-_.]+/[\\w\\d-_.]+/pull/\\d+$`));
3541

3642
return isIssue || isPR;
3743
}
3844

3945
isProjectUrl(host: string, url: string): boolean {
4046
if (!url) return false;
4147

42-
return !!url.match(new RegExp(`^https://${host}/[\\w\\d-_.]+/[\\w\\d-_.]+/projects/\\d+$`));
48+
const urlObj = new URL(url);
49+
if (urlObj.host !== host) return false;
50+
51+
return !!urlObj.pathname.match(new RegExp(`^/[\\w\\d-_.]+/[\\w\\d-_.]+/projects/\\d+$`));
4352
}
4453

4554
getIssueTypeInfo(issue: IssueEntity): {icon: IconNameType; color: string; label: string, state: string} {

0 commit comments

Comments
 (0)