diff --git a/packages/controlled-form/src/lib/AsyncAutocomplete.stories.tsx b/packages/controlled-form/src/lib/AsyncAutocomplete.stories.tsx index 4d01233b2c..41bf604e2d 100644 --- a/packages/controlled-form/src/lib/AsyncAutocomplete.stories.tsx +++ b/packages/controlled-form/src/lib/AsyncAutocomplete.stories.tsx @@ -114,7 +114,7 @@ export const _ControlledAsyncAutoCompleteMultiple: StoryObj val.label, - isOptionEqualToValue: (option, value) => option.label === value.label, + isOptionEqualToValue: (option: Option, value: Option) => option.label === value.label, loadOptions, limit: 5, queryKey: 'example', @@ -165,5 +165,8 @@ export const _ControlledAsyncAutoCompleteDefaultToOnlyOption: StoryObj { + console.log(value); + }, }, }; diff --git a/packages/controlled-form/src/lib/AsyncAutocomplete.test.tsx b/packages/controlled-form/src/lib/AsyncAutocomplete.test.tsx index 39660a2840..df77b0dcb7 100644 --- a/packages/controlled-form/src/lib/AsyncAutocomplete.test.tsx +++ b/packages/controlled-form/src/lib/AsyncAutocomplete.test.tsx @@ -1,4 +1,4 @@ -import { fireEvent, render, waitFor } from '@testing-library/react'; +import { fireEvent, render, screen, waitFor, act } from '@testing-library/react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import AvApi, { ApiConfig } from '@availity/api-axios'; // eslint-disable-next-line @nx/enforce-module-boundaries @@ -66,7 +66,7 @@ describe('ControlledAsyncAutocomplete', () => { }); test('should loadOptions successfully', async () => { - const screen = render( + render( { ); const dropdown = screen.getByRole('combobox'); - fireEvent.click(dropdown); - fireEvent.keyDown(dropdown, { key: 'ArrowDown' }); - await waitFor(() => expect(screen.getByText('Option 1')).toBeDefined()); + act(() => { + fireEvent.click(dropdown); + fireEvent.keyDown(dropdown, { key: 'ArrowDown' }); + }); + + await waitFor(() => expect(screen.getByText('Option 0')).toBeDefined()); }); test('should set the value and submit the form data', async () => { - const screen = render( + render( { describe('when using rules', () => { describe('when required', () => { test('should indicate it is required when passing a string', async () => { - const screen = render( + render( { }); test('should indicate it is required when passing an object with true', async () => { - const screen = render( + render( { }); test('should not indicate it is required when passing an object with false', async () => { - const screen = render( + render( { }); }); }); -}); \ No newline at end of file +}); diff --git a/packages/controlled-form/src/lib/AsyncAutocomplete.tsx b/packages/controlled-form/src/lib/AsyncAutocomplete.tsx index 7f5df613ff..3dda74ef5b 100644 --- a/packages/controlled-form/src/lib/AsyncAutocomplete.tsx +++ b/packages/controlled-form/src/lib/AsyncAutocomplete.tsx @@ -77,12 +77,13 @@ export const ControlledAsyncAutocomplete = < loadOptions={async (offset, limit, inputValue) => { const { options, hasMore, offset: returnedOffsetValue } = await rest.loadOptions(offset, limit, inputValue); - if (defaultToFirstOption && offset === 0) { - setValue(name, rest.multiple ? [options[0]] : options[0]); - } + const shouldAssignValue = + (defaultToFirstOption && offset === 0) || (defaultToOnlyOption && offset === 0 && options.length === 1); - if (defaultToOnlyOption && offset === 0 && options.length === 1) { - setValue(name, rest.multiple ? [options[0]] : options[0]); + if (shouldAssignValue) { + const newValue = rest.multiple ? [options[0]] : options[0]; + setValue(name, newValue); + onChange(newValue); } return { options, hasMore, offset: returnedOffsetValue };