fix: restore live server validation while keeping input stable during typing
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import React, {
|
import React, {
|
||||||
|
ChangeEventHandler,
|
||||||
FocusEventHandler,
|
FocusEventHandler,
|
||||||
KeyboardEventHandler,
|
KeyboardEventHandler,
|
||||||
MouseEventHandler,
|
MouseEventHandler,
|
||||||
@@ -21,6 +22,7 @@ import {
|
|||||||
} from 'folds';
|
} from 'folds';
|
||||||
import FocusTrap from 'focus-trap-react';
|
import FocusTrap from 'focus-trap-react';
|
||||||
|
|
||||||
|
import { useDebounce } from '../../hooks/useDebounce';
|
||||||
import { stopPropagation } from '../../utils/keyboard';
|
import { stopPropagation } from '../../utils/keyboard';
|
||||||
|
|
||||||
export function ServerPicker({
|
export function ServerPicker({
|
||||||
@@ -49,6 +51,13 @@ export function ServerPicker({
|
|||||||
}
|
}
|
||||||
}, [server]);
|
}, [server]);
|
||||||
|
|
||||||
|
const debounceServerSelect = useDebounce(onServerChange, { wait: 700 });
|
||||||
|
|
||||||
|
const handleServerChange: ChangeEventHandler<HTMLInputElement> = (evt) => {
|
||||||
|
const inputServer = evt.target.value.trim();
|
||||||
|
if (inputServer) debounceServerSelect(inputServer);
|
||||||
|
};
|
||||||
|
|
||||||
const handleBlur: FocusEventHandler<HTMLInputElement> = (evt) => {
|
const handleBlur: FocusEventHandler<HTMLInputElement> = (evt) => {
|
||||||
const inputServer = evt.target.value.trim();
|
const inputServer = evt.target.value.trim();
|
||||||
if (inputServer && inputServer !== server) {
|
if (inputServer && inputServer !== server) {
|
||||||
@@ -88,6 +97,7 @@ export function ServerPicker({
|
|||||||
variant={allowCustomServer ? 'Background' : 'Surface'}
|
variant={allowCustomServer ? 'Background' : 'Surface'}
|
||||||
outlined
|
outlined
|
||||||
defaultValue={server}
|
defaultValue={server}
|
||||||
|
onChange={handleServerChange}
|
||||||
onBlur={handleBlur}
|
onBlur={handleBlur}
|
||||||
onKeyDown={handleKeyDown}
|
onKeyDown={handleKeyDown}
|
||||||
size="500"
|
size="500"
|
||||||
|
|||||||
Reference in New Issue
Block a user