Skip to content

Commit

Permalink
feat: add AutocompleteField
Browse files Browse the repository at this point in the history
  • Loading branch information
spawnia committed Feb 6, 2024
1 parent 06c7885 commit 203ff01
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 0 deletions.
21 changes: 21 additions & 0 deletions src/Autocomplete/index.stories.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { Story } from '@storybook/react';
import React from 'react';

import { toFormInputOption } from '../Select';

import { AutocompleteProps, Autocomplete } from './index';

export default {
title: 'Autocomplete',
};

export const WithOptions: Story<AutocompleteProps> = function WithOptions(
args,
) {
return (
<Autocomplete
options={['food', 'foo', 'foobar', 'bar'].map(toFormInputOption)}
{...args}
/>
);
};
44 changes: 44 additions & 0 deletions src/Fields/AutocompleteField.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import React from 'react';
import {
useController,
FieldValues,
UseControllerProps,
FieldPath,
} from 'react-hook-form';

import { Autocomplete, AutocompleteProps } from '../Autocomplete';

import { useFieldContext } from './FieldProvider';
import { FieldWrapper, FieldWrapperProps } from './FieldWrapper';

type AutocompleteFieldProps<
TFieldValues extends FieldValues,
TName extends FieldPath<TFieldValues>,
> = UseControllerProps<TFieldValues, TName> &
Pick<FieldWrapperProps<TFieldValues, TName>, 'formItem'> & {
component?: AutocompleteProps;
};

export function AutocompleteField<
TFieldValues extends FieldValues = FieldValues,
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
>({
formItem,
component,
...controller
}: AutocompleteFieldProps<TFieldValues, TName>) {
const { field } = useController<TFieldValues, TName>(controller);

const { disabled } = useFieldContext();

return (
<FieldWrapper controller={controller} formItem={formItem}>
<Autocomplete
{...field}
value={field.value ?? undefined}
disabled={disabled}
{...component}
/>
</FieldWrapper>
);
}
10 changes: 10 additions & 0 deletions src/Fields/index.stories.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { TextAreaRef } from '../Input';
import { toFormInputOption } from '../Select';
import { Space } from '../Space';

import { AutocompleteField } from './AutocompleteField';
import { CheckboxField } from './CheckboxField';
import { FieldProvider, FieldProviderProps } from './FieldProvider';
import { InputField } from './InputField';
Expand All @@ -23,6 +24,7 @@ export default {
};

type FormType = {
autocomplete: string;
checkbox: boolean;
input: string;
input_number: number;
Expand Down Expand Up @@ -124,6 +126,14 @@ function AllFields() {
const formMethods = useFormContext<FormType>();
return (
<Form>
<AutocompleteField
name="autocomplete"
control={formMethods.control}
formItem={{ label: 'Autocomplete' }}
component={{
options: ['foo', 'bar'].map(toFormInputOption),
}}
/>
<CheckboxField
name="checkbox"
control={formMethods.control}
Expand Down

0 comments on commit 203ff01

Please sign in to comment.