Вибір доступу більше не закриває картку хоста
Some checks are pending
CI / web (push) Waiting to run
CI / server (push) Waiting to run
CI / agent (push) Waiting to run

Регресія від переносу списку в портал. Портал рве DOM-дерево, але не
дерево React: подія з нього спливає до компонента-батька, тобто до
модального вікна. Воно закривається за натисканням «повз панель» — і
клік по пункту, який фізично лежить у body, вважався кліком поза формою.

Зупиняємо спливання на самому списку. Клік по підкладці закриває форму,
як і раніше.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
byrsapty 2026-08-25 17:19:09 +03:00
parent ed82819419
commit 03ea70e5de
2 changed files with 24 additions and 0 deletions

View file

@ -2912,3 +2912,22 @@ NAT цілком може слухати SSH на 2222.
й не обрізається; у body, не всередині вікна й не обрізається; у body, не всередині вікна
за екран не вилазить за екран не вилазить
``` ```
### Портал закривав форму
Вибір доступу закривав картку хоста разом із набраним. Регресія від
попередньої правки, і причина не очевидна.
Портал рве DOM-дерево, але **не дерево React**: подія з нього спливає до
компонента-батька, тобто до модального вікна. А воно закривається за
натисканням «повз панель» — і клік по пункту списку, який фізично лежить
у `body`, вважався кліком поза формою.
Лікується зупинкою спливання на самому списку. Перевірено, що клік по
підкладці закриває форму, як і раніше.
```
вибір пункту форма лишається, чип додано, лічильник «Доступи 1»
другий вибір список не закрився, «Доступи 2»
клік по підкладці форма закривається
```

View file

@ -151,6 +151,11 @@ export function Picker({
rect && rect &&
createPortal( createPortal(
<ul <ul
// Портал рве DOM-дерево, але не дерево React: подія з нього
// спливає до компонента-батька, тобто до модального вікна.
// А воно закривається за натисканням «повз панель» — і
// вибір пункту списку закривав форму разом із набраним.
onMouseDown={(e) => e.stopPropagation()}
className="fixed z-[60] max-h-56 overflow-y-auto rounded border border-slate-700 className="fixed z-[60] max-h-56 overflow-y-auto rounded border border-slate-700
bg-slate-900 shadow-xl" bg-slate-900 shadow-xl"
style={{ style={{