Skip to content

Commit 41778d5

Browse files
committed
get issues from api
1 parent 1afcb06 commit 41778d5

File tree

2 files changed

+19
-112
lines changed

2 files changed

+19
-112
lines changed

web_src/js/features/comp/TextExpander.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ import {matchEmoji, matchMention, matchIssue} from '../../utils/match.ts';
22
import {emojiString} from '../emoji.ts';
33
import {svg} from '../../svg.ts';
44

5-
type Issue = {state: 'open' | 'closed'; pull_request: {draft: boolean; merged: boolean} | null};
5+
type Issue = {id: string; title: string; state: 'open' | 'closed'; pull_request?: {draft: boolean; merged: boolean}};
66
function getIssueIcon(issue: Issue) {
7-
if (issue.pull_request !== null) {
7+
if (issue.pull_request) {
88
if (issue.state === 'open') {
99
if (issue.pull_request.draft === true) {
1010
return 'octicon-git-pull-request-draft'; // WIP PR
@@ -21,7 +21,7 @@ function getIssueIcon(issue: Issue) {
2121
}
2222

2323
function getIssueColor(issue: Issue) {
24-
if (issue.pull_request !== null) {
24+
if (issue.pull_request) {
2525
if (issue.pull_request.draft === true) {
2626
return 'grey'; // WIP PR
2727
} else if (issue.pull_request.merged === true) {
@@ -90,23 +90,23 @@ export function initTextExpander(expander) {
9090

9191
const ul = document.createElement('ul');
9292
ul.classList.add('suggestions');
93-
for (const {value, name, issue} of matches) {
93+
for (const issue of matches) {
9494
const li = document.createElement('li');
9595
li.classList.add('tw-flex', 'tw-gap-2');
9696
li.setAttribute('role', 'option');
97-
li.setAttribute('data-value', `${key}${value}`);
97+
li.setAttribute('data-value', `${key}${issue.id}`);
9898

9999
const icon = document.createElement('div');
100100
icon.innerHTML = svg(getIssueIcon(issue), 16, ['text', getIssueColor(issue)].join(' ')).trim();
101101
li.append(icon.firstChild);
102102

103103
const id = document.createElement('span');
104104
id.classList.add('id');
105-
id.textContent = value;
105+
id.textContent = issue.id;
106106
li.append(id);
107107

108108
const nameSpan = document.createElement('span');
109-
nameSpan.textContent = name;
109+
nameSpan.textContent = issue.title;
110110
li.append(nameSpan);
111111

112112
ul.append(li);

web_src/js/utils/match.ts

Lines changed: 12 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ export function matchEmoji(queryText: string): string[] {
2828
return sortAndReduce(results);
2929
}
3030

31-
type Mention = {value: string; name: string; fullname: string; avatar: string};
32-
export function matchMention(queryText: string): Mention[] {
31+
type MentionSuggestion = {value: string; name: string; fullname: string; avatar: string};
32+
export function matchMention(queryText: string): MentionSuggestion[] {
3333
const query = queryText.toLowerCase();
3434

3535
// results is a map of weights, lower is better
36-
const results = new Map<Mention, number>();
36+
const results = new Map<MentionSuggestion, number>();
3737
for (const obj of window.config.mentionValues ?? []) {
3838
const index = obj.key.toLowerCase().indexOf(query);
3939
if (index === -1) continue;
@@ -44,113 +44,20 @@ export function matchMention(queryText: string): Mention[] {
4444
return sortAndReduce(results);
4545
}
4646

47-
type Issue = {state: 'open' | 'closed'; pull_request: {draft: boolean; merged: boolean} | null};
48-
type IssueMention = {value: string; name: string; issue: Issue};
49-
export async function matchIssue(url: string, queryText: string): Promise<IssueMention[]> {
47+
type Issue = {id: number; title: string; state: 'open' | 'closed'; pull_request?: {draft: boolean; merged: boolean}};
48+
export async function matchIssue(url: string, queryText: string): Promise<Issue[]> {
5049
const query = queryText.toLowerCase();
5150

52-
// http://localhost:3000/anbraten/test/issues/1
53-
// http://localhost:3000/anbraten/test/compare/main...anbraten-patch-1
51+
// TODO: support sub-path
5452
const repository = (new URL(url)).pathname.split('/').slice(1, 3).join('/');
55-
const issuePullRequestId = url.split('/').slice(-1)[0];
53+
const issuePullRequestId = parseInt(url.split('/').slice(-1)[0]);
5654

57-
console.log('suggestions for 1', {
58-
repository,
59-
query,
55+
const res = await request(`/api/v1/repos/${repository}/issues?q=${query}`, {
56+
method: 'GET',
6057
});
6158

62-
// TODO: fetch data from api
63-
// const res = await request('/-/suggestions', {
64-
// method: 'GET',
65-
// data: {
66-
// repository,
67-
// query,
68-
// },
69-
// });
70-
// console.log(await res.json());
59+
const issues: Issue[] = await res.json();
7160

72-
// results is a map of weights, lower is better
73-
const results = new Map<IssueMention, number>();
74-
// for (const obj of window.config.mentionValues ?? []) {
75-
// const index = obj.key.toLowerCase().indexOf(query);
76-
// if (index === -1) continue;
77-
// const existing = results.get(obj);
78-
// results.set(obj, existing ? existing - index : index);
79-
// }
80-
81-
results.set({
82-
value: '28958',
83-
name: 'Live removal of issue comments using htmx websocket',
84-
issue: {
85-
state: 'open',
86-
pull_request: {
87-
merged: false,
88-
draft: false,
89-
},
90-
},
91-
}, 0);
92-
93-
results.set({
94-
value: '32234',
95-
name: 'Calculate `PublicOnly` for org membership only once',
96-
issue: {
97-
state: 'closed',
98-
pull_request: {
99-
merged: true,
100-
draft: false,
101-
},
102-
},
103-
}, 1);
104-
105-
results.set({
106-
value: '32280',
107-
name: 'Optimize branch protection rule loading',
108-
issue: {
109-
state: 'open',
110-
pull_request: {
111-
merged: false,
112-
draft: false,
113-
},
114-
},
115-
}, 2);
116-
117-
results.set({
118-
value: '32326',
119-
name: 'Shallow Mirroring',
120-
issue: {
121-
state: 'open',
122-
pull_request: null,
123-
},
124-
}, 3);
125-
126-
results.set({
127-
value: '32248',
128-
name: 'Make admins adhere to branch protection rules',
129-
issue: {
130-
state: 'closed',
131-
pull_request: {
132-
merged: true,
133-
draft: false,
134-
},
135-
},
136-
}, 4);
137-
138-
results.set({
139-
value: '32249',
140-
name: 'Add a way to disable branch protection rules for admins',
141-
issue: {
142-
state: 'closed',
143-
pull_request: null,
144-
},
145-
}, 5);
146-
147-
// filter out current issue/pull request
148-
for (const [key] of results.entries()) {
149-
if (key.value === issuePullRequestId) {
150-
results.delete(key);
151-
break;
152-
}
153-
}
154-
155-
return sortAndReduce(results);
61+
// filter issue with same id
62+
return issues.filter((i) => i.id !== issuePullRequestId);
15663
}

0 commit comments

Comments
 (0)