1.17.2 • Published 2 months ago

@tamagui-extras/form v1.17.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 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.2

2 months ago

1.17.1

2 months ago

1.17.0

2 months ago

1.16.0

3 months ago

1.15.1

3 months ago

1.15.0

4 months ago

1.14.0

4 months ago

1.13.4

5 months ago

1.13.3

5 months ago

1.13.2

5 months ago

1.13.1

5 months ago

1.13.0

5 months ago

1.12.3

5 months ago

1.12.2

5 months ago

1.12.1

5 months ago

1.12.0

5 months ago

1.12.4

5 months ago

1.11.0

5 months ago

1.10.0

5 months ago

1.8.2

6 months ago

1.9.0

6 months ago

1.8.1

6 months ago

1.8.0

6 months ago

1.7.0

7 months ago

1.6.0

8 months ago

1.5.1

8 months ago

1.5.0

8 months ago

1.4.0

10 months ago

1.8.3

6 months ago

1.3.0

11 months ago

1.2.0

12 months ago

1.1.4

1 year ago

1.2.2

12 months ago

1.1.3

1 year ago

1.2.1

12 months ago

1.1.2

1 year ago

1.1.1

1 year ago

1.1.0

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago

0.17.1

1 year ago

0.17.0

1 year ago