1.17.3 • Published 12 months ago

@tamagui-extras/form v1.17.3

Weekly downloads
-
License
MIT
Repository
github
Last release
12 months ago

Tamagui + React-Hook-Form == @tamagui-extras/form

Installation

To use Tamagui and React Hook Form together, install the following packages first:

yarn add @tamagui-extras/form

Configuration

Add @tamagui-extras/form to the next.config.js or babel.config.js file to transpile the package.

withTamagui({
    config: './tamagui.config.ts',
    components: ['tamagui', '@tamagui-extras/form' /* any other ui components */],
    // the rest of your config
})

Integration of react-hook-form

Form components starts with Lm have a trailing Rhf component name for an easy integration with react-hook-form library.

Wrap any form component with LmFormRhfProvider and add a LmSubmitButtonRhf to validate and receive all form values.

Usage

import {LmFormRhfProvider, LmInputRhf, LmSliderRhf, LmSubmitButtonRhf} from "@tamagui-extras/form";
import {YStack} from 'tamagui'

function MyForm() {
    const [mutate, {isLoading}] = useMutation()
    return (
        <LmFormRhfProvider>
            <YStack space>
                <LmInputRhf name={'name'} label="Name"/>
                <LmSliderRhf name={'slider'} label="Slider"/>
                <LmSubmitButtonRhf
                    onSubmit={(formData) => {
                        mutate(formData)
                    }}
                    loading={isLoading}
                >Submit
                </LmSubmitButtonRhf>
            </YStack>
        </LmFormRhfProvider>
    )
}

For better Typescript support you can also use the render function of LmFormRhfProvider, have a look at following example:

<LmFormRhfProvider
    defaultValues={{
        name: '',
        email: ''
    }}
>
    {({control, handleSubmit, reset}) => (
        <Form gap={'$3'}
              onSubmit={handleSubmit(data => {
                  console.log(data);
              })}
        >
            <LmAlert severity={'info'} outlined>
                <Paragraph>
                    To be type safe use render function as child of LmFormRhfProvider and pass `control`
                    to all form components.
                </Paragraph>
            </LmAlert>
            <LmInputRhf name={'name'} control={control} label={'Name'} placeholder={'Type your name...'} labelInline
                        required/>
            <LmInputRhf name={'email'} control={control} label={'Name'} placeholder={'Type your email...'} labelInline/>
            <XStack gap={'$3'}>
                <LmButton onPress={() => reset()}>Reset</LmButton>
                <Form.Trigger asChild>
                    <LmButton colorVariant={'primary'}>Submit</LmButton>
                </Form.Trigger>
            </XStack>
        </Form>)}
</LmFormRhfProvider>

Demo of all components: Storybook Demo

1.17.3

12 months ago

1.17.2

1 year ago

1.17.1

1 year ago

1.17.0

1 year ago

1.16.0

1 year ago

1.15.1

1 year ago

1.15.0

1 year ago

1.14.0

1 year ago

1.13.4

2 years ago

1.13.3

2 years ago

1.13.2

2 years ago

1.13.1

2 years ago

1.13.0

2 years ago

1.12.3

2 years ago

1.12.2

2 years ago

1.12.1

2 years ago

1.12.0

2 years ago

1.12.4

2 years ago

1.11.0

2 years ago

1.10.0

2 years ago

1.8.2

2 years ago

1.9.0

2 years ago

1.8.1

2 years ago

1.8.0

2 years ago

1.7.0

2 years ago

1.6.0

2 years ago

1.5.1

2 years ago

1.5.0

2 years ago

1.4.0

2 years ago

1.8.3

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago

1.1.4

2 years ago

1.2.2

2 years ago

1.1.3

2 years ago

1.2.1

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.10

2 years ago

1.0.9

2 years ago

1.0.8

2 years ago

1.0.7

2 years ago

1.0.6

2 years ago

1.0.5

2 years ago

1.0.4

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago

0.17.1

2 years ago

0.17.0

2 years ago