From c69a11d167842b481070ea910629af7b95122b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Fri, 16 Oct 2026 12:33:38 +0500 Subject: [PATCH] feat: add clear button to the project search field Clears only the search text and reopens the list, the selected project stays. Requested during manual testing. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../pages/hub/ProjectPicker.module.scss | 19 +++++++++++++++++++ .../stroyBot/pages/hub/ProjectPicker.tsx | 19 +++++++++++++++++++ src/webparts/stroyBot/pages/hub/texts.ts | 1 + 3 files changed, 39 insertions(+) diff --git a/src/webparts/stroyBot/pages/hub/ProjectPicker.module.scss b/src/webparts/stroyBot/pages/hub/ProjectPicker.module.scss index f38ea2e..88e5e5e 100644 --- a/src/webparts/stroyBot/pages/hub/ProjectPicker.module.scss +++ b/src/webparts/stroyBot/pages/hub/ProjectPicker.module.scss @@ -50,6 +50,25 @@ $dropdown-max-height: 340px; color: $gray-900; } +.clearButton { + display: inline-flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + padding: $sp-1; + margin-right: $sp-2; + border: 0; + border-radius: $r-full; + background: transparent; + color: $gray-400; + cursor: pointer; + + &:hover { + background: $gray-100; + color: $gray-700; + } +} + .selectedBadge { flex-shrink: 0; } diff --git a/src/webparts/stroyBot/pages/hub/ProjectPicker.tsx b/src/webparts/stroyBot/pages/hub/ProjectPicker.tsx index 474a767..7a58695 100644 --- a/src/webparts/stroyBot/pages/hub/ProjectPicker.tsx +++ b/src/webparts/stroyBot/pages/hub/ProjectPicker.tsx @@ -40,6 +40,14 @@ export const ProjectPicker: React.FC = () => { setIsOpen(true); }; + // Очистка не сбрасывает выбранный проект — только текст поиска, чтобы сразу искать другой. + const onClear = (event: React.MouseEvent): void => { + event.preventDefault(); + setQuery(''); + setIsOpen(true); + inputRef.current?.focus(); + }; + // mousedown, а не click: иначе поле теряет фокус раньше, чем срабатывает выбор. const onPick = (event: React.MouseEvent, project: IAccessibleProject): void => { event.preventDefault(); @@ -67,6 +75,17 @@ export const ProjectPicker: React.FC = () => { onFocus={onFocus} onChange={onChange} /> + {query && ( + + )} {currentProject?.status && ( diff --git a/src/webparts/stroyBot/pages/hub/texts.ts b/src/webparts/stroyBot/pages/hub/texts.ts index f3241cc..e61739c 100644 --- a/src/webparts/stroyBot/pages/hub/texts.ts +++ b/src/webparts/stroyBot/pages/hub/texts.ts @@ -4,6 +4,7 @@ export const HUB_TEXTS = { picker: { label: 'Проект:', placeholder: 'Выберите проект', + clear: 'Очистить', loading: 'Загрузка проектов…', noProjects: 'Нет доступных проектов', notFound: 'Проекты не найдены',