From b861fcce68d4d0511392b717ef00e617d7a182b8 Mon Sep 17 00:00:00 2001 From: Andrey Medvedev Date: Fri, 22 Dec 2023 16:39:01 +0300 Subject: [PATCH] fix(DateInput): Clear DateInput focus when click Done button (#6312) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Немного поменял логику сброса программного фокуса. Функция для сброса вызывается при клике снаружи или при выборе даты, если используется свойство `closeOnChange`. Но функция сброса внутри проверяет состояние календаря`open` и только если оно true, то фокус сбрасывается. В #6244 как раз ситуация, когда по клику на кнопку "Готово", мы закрываем попап календаря, но фокус не убираем. Потом кликаем по другой кнопке, это как раз "click outside", но фокус не сбрасывается, потому что `open` ужe `false`. Переделал проверку с `open` на `focusedElement`. Работать будет аналогично, но и фокус сбрасываться будет более предсказуемо и всегда при вызове `resetFocusFormField` если фокус установлен. --- packages/vkui/src/hooks/useDateInput.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vkui/src/hooks/useDateInput.ts b/packages/vkui/src/hooks/useDateInput.ts index 3186b68fb5..f53959fdc4 100644 --- a/packages/vkui/src/hooks/useDateInput.ts +++ b/packages/vkui/src/hooks/useDateInput.ts @@ -39,13 +39,13 @@ export function useDateInput({ const { window } = useDOM(); const removeFocusFromField = React.useCallback(() => { - if (open) { + if (focusedElement !== null) { setFocusedElement(null); closeCalendar(); window!.getSelection()?.removeAllRanges(); setInternalValue(getInternalValue(value)); } - }, [closeCalendar, getInternalValue, open, value, window]); + }, [focusedElement, closeCalendar, getInternalValue, value, window]); const handleClickOutside = React.useCallback( (e: MouseEvent) => {