mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
fix(ui): focus add node popover on open
Need an extra ref to pass to the InvSelect component.
This commit is contained in:
parent
5168415999
commit
6209fef63d
@ -4,7 +4,7 @@ import type {
|
||||
StylesConfig,
|
||||
} from 'chakra-react-select';
|
||||
import { Select as ChakraReactSelect } from 'chakra-react-select';
|
||||
import { memo, useMemo } from 'react';
|
||||
import { memo, useEffect, useMemo } from 'react';
|
||||
|
||||
import { CustomMenuList } from './CustomMenuList';
|
||||
import { CustomOption } from './CustomOption';
|
||||
@ -29,7 +29,7 @@ const components: SelectComponentsConfig<
|
||||
};
|
||||
|
||||
export const InvSelect = memo((props: InvSelectProps) => {
|
||||
const { sx, selectRef, ...rest } = props;
|
||||
const { sx, selectRef, inputRef, ...rest } = props;
|
||||
const chakraStyles = useMemo<CustomChakraStylesConfig>(
|
||||
() => ({
|
||||
container: (provided, _state) => ({ ...provided, w: 'full', ...sx }),
|
||||
@ -55,6 +55,13 @@ export const InvSelect = memo((props: InvSelectProps) => {
|
||||
[sx]
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
if (!inputRef) {
|
||||
return;
|
||||
}
|
||||
inputRef.current = selectRef?.current?.inputRef ?? null;
|
||||
}, [inputRef, selectRef]);
|
||||
|
||||
return (
|
||||
<ChakraReactSelect<InvSelectOption, false, GroupBase<InvSelectOption>>
|
||||
ref={selectRef}
|
||||
|
@ -28,6 +28,7 @@ export type InvSelectProps = ChakraReactSelectProps<
|
||||
selectRef?: React.RefObject<
|
||||
SelectInstance<InvSelectOption, false, GroupBase<InvSelectOption>>
|
||||
>;
|
||||
inputRef?: React.MutableRefObject<HTMLInputElement | null>;
|
||||
};
|
||||
export type CustomChakraStylesConfig = ChakraStylesConfig<
|
||||
InvSelectOption,
|
||||
|
@ -65,6 +65,8 @@ const AddNodePopover = () => {
|
||||
const toaster = useAppToaster();
|
||||
const { t } = useTranslation();
|
||||
const selectRef = useRef<SelectInstance<InvSelectOption> | null>(null);
|
||||
const inputRef = useRef<HTMLInputElement>(null);
|
||||
|
||||
const fieldFilter = useAppSelector(
|
||||
(state) => state.nodes.connectionStartFieldType
|
||||
);
|
||||
@ -201,6 +203,7 @@ const AddNodePopover = () => {
|
||||
closeDelay={0}
|
||||
closeOnBlur={true}
|
||||
returnFocusOnClose={true}
|
||||
initialFocusRef={inputRef}
|
||||
>
|
||||
<InvPopoverAnchor>
|
||||
<Flex
|
||||
@ -230,6 +233,7 @@ const AddNodePopover = () => {
|
||||
onChange={onChange}
|
||||
onMenuClose={onClose}
|
||||
onKeyDown={onKeyDown}
|
||||
inputRef={inputRef}
|
||||
/>
|
||||
</InvPopoverBody>
|
||||
</InvPopoverContent>
|
||||
|
Loading…
Reference in New Issue
Block a user