Allow multiple projects per issue and pull requests (#36784)

Add ability to add and remove multiple projects per issue
and pull request.

Resolve #12974

---------

Signed-off-by: Icy Avocado <avocado@ovacoda.com>
Co-authored-by: Tyrone Yeh <siryeh@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: OpenCode (gpt-5.2-codex) <opencode@openai.com>
Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: silverwind <me@silverwind.io>
Co-authored-by: Claude (Opus 4.7) <noreply@anthropic.com>
This commit is contained in:
Icy Avocado
2026-04-30 08:38:05 -06:00
committed by GitHub
parent 52d6baf5a8
commit 81692ceafa
58 changed files with 1597 additions and 430 deletions

View File

@@ -897,7 +897,7 @@ table th[data-sortt-desc] .svg {
display: flex;
align-items: center;
gap: var(--gap-block);
min-width: 0;
max-width: 100%;
}
.flex-left-right > .ui.button,

View File

@@ -62,10 +62,17 @@
visibility: hidden;
}
.sidebar-project-card {
.ui.list.issue-sidebar-project-cards > .item {
display: flex;
align-items: center;
gap: var(--gap-block);
}
.ui.list.issue-sidebar-project-cards > .item.sidebar-project-card {
flex-direction: column;
align-items: flex-start;
border: 1px solid var(--color-secondary);
border-radius: var(--border-radius);
margin-top: var(--gap-block);
padding: 8px;
}

View File

@@ -70,7 +70,7 @@ export class IssueSidebarComboList {
updateUiList(changedValues: Array<string>) {
if (!this.elList) return;
const elEmptyTip = this.elList.querySelector('.item.empty-list')!;
const elEmptyTip = this.elList.querySelector(':scope > .item.empty-list')!;
queryElemChildren(this.elList, '.item:not(.empty-list)', (el) => el.remove());
for (const value of changedValues) {
const el = this.elDropdown.querySelector<HTMLElement>(`.menu > .item[data-value="${CSS.escape(value)}"]`);
@@ -139,7 +139,7 @@ export class IssueSidebarComboList {
async doUpdate() {
const changedValues = this.collectCheckedValues();
if (this.initialValues.join(',') === changedValues.join(',')) return;
this.updateUiList(changedValues);
if (!this.updateUrl) this.updateUiList(changedValues);
if (this.updateUrl) await this.updateToBackend(changedValues);
this.initialValues = changedValues;
}
@@ -196,7 +196,9 @@ export class IssueSidebarComboList {
const elItem = this.elDropdown.querySelector<HTMLElement>(`.menu > .item[data-value="${CSS.escape(value)}"]`);
elItem?.classList.add('checked');
}
this.updateUiList(values);
if (this.elList && this.elList.getAttribute('data-combo-list-inited') !== 'true') {
this.updateUiList(values);
}
}
this.initialValues = this.collectCheckedValues();