From c8ca6616daea4d0b383483e6f6cb80494c0396d6 Mon Sep 17 00:00:00 2001 From: Ignat Remizov Date: Tue, 19 May 2026 21:06:24 +0300 Subject: [PATCH] fix(tracker): allow clearing issue assignees Add an explicit no-assignee path to the issue assignee picker so users can remove an assignee without the popup fallback assigning the current user again. Changes: - Add a selectable No assignee row to the contact assignee popup and keep it available when deselection is allowed. - Preserve undefined as the cancel/no-selection result while dispatching null for an intentional clear-assignee action. - Translate null assignee updates in the tracker assignee editor into a $unset operation so the issue assignee field is removed from persistence. - Keep normal user selection behavior unchanged for person rows and multi-issue assignee updates. Validation: - git diff --check Signed-off-by: Ignat Remizov --- .../src/components/DocPopup.svelte | 27 +++ .../src/components/AssigneePopup.svelte | 182 ++++++++++++++---- .../components/issues/AssigneeEditor.svelte | 15 +- 3 files changed, 181 insertions(+), 43 deletions(-) diff --git a/packages/presentation/src/components/DocPopup.svelte b/packages/presentation/src/components/DocPopup.svelte index 9568beeb814..fa803031ced 100644 --- a/packages/presentation/src/components/DocPopup.svelte +++ b/packages/presentation/src/components/DocPopup.svelte @@ -24,6 +24,7 @@ IconAdd, IconCheck, IconSearch, + Label, ListView, Spinner, Submenu, @@ -128,6 +129,13 @@ } } + function clearSelection (): void { + if (multiSelect) return + + selected = undefined + dispatch(closeAfterSelect ? 'close' : 'update', undefined) + } + function onKeydown (key: KeyboardEvent): void { if (key.code === 'ArrowUp') { key.stopPropagation() @@ -259,6 +267,25 @@ {:else if !embedded}