UNPKG

@blocklet/payment-react

Version:

Reusable react components for payment kit v2

121 lines (97 loc) 6.61 kB
# AddressForm `AddressForm`コンポーネントは、請求先住所情報を収集するための構築済みUIを提供します。`react-hook-form`とシームレスに統合されており、郵便番号などのフィールドに対して国別の組み込みバリデーションが含まれています。 このコンポーネントは柔軟に設計されており、完全な住所の収集と、Stripeの郵便番号検証用の簡易バージョンの両方をサポートしています。 ## Props | Prop | Type | Description | Default | | ----------------- | ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | --------------- | | `mode` | `string` | 表示するフィールドを決定します。`'required'`に設定すると、完全な住所フォーム(住所1、市区町村、都道府県、郵便番号、国)が表示されます。 | `undefined` | | `stripe` | `boolean` | `true`の場合、郵便番号と国のみを含む簡易フォームを表示します。これは通常、Stripeでのカード検証に使用されます。 | `false` | | `sx` | `SxProps` | ルートの`Stack`コンポーネントをカスタムスタイリングするためのMUIの`sx`プロパティです。 | `{}` | | `fieldValidation` | `Record<string, any>` | 特定のフィールドに正規表現パターンなどのカスタムバリデーションルールを提供するためのオブジェクトです。詳細はバリデーションのセクションを参照してください。 | `{}` | | `errorPosition` | `'right'` \| `'bottom'` | 入力フィールドに対してバリデーションエラーメッセージをどこに表示するかを指定します。 | `'right'` | ## Usage `AddressForm`は、フィールドの登録と状態管理のために`react-hook-form`のコンテキストに依存しているため、`FormProvider`内で使用する必要があります。 ### 標準的な請求先住所 完全な請求先住所を収集するには、`mode`プロパティを`'required'`に設定します。これにより、すべての標準的な住所フィールドが、それぞれ`'required'`のバリデーションルールと共にレンダリングされます。 ```tsx AddressForm with Full Address icon=material-symbols:location-on-outline import { FormProvider, useForm } from 'react-hook-form'; import { Button, Stack } from '@mui/material'; import AddressForm from './AddressForm'; // インポートパスを調整してください export default function FullAddressExample() { const methods = useForm({ defaultValues: { billing_address: { line1: '', city: '', state: '', postal_code: '', country: 'US', // デフォルトの国 }, }, }); const onSubmit = (data) => { console.log('Form data:', data); }; return ( <FormProvider {...methods}> <form onSubmit={methods.handleSubmit(onSubmit)}> <Stack spacing={2}> <AddressForm mode="required" /> <Button type="submit" variant="contained"> Submit </Button> </Stack> </form> </FormProvider> ); } ``` この設定では、住所、市区町村、都道府県、郵便番号の入力フィールドがレンダリングされます。国は、統合された[CountrySelect](./components-ui-form-elements-country-select.md)コンポーネントを介して選択されます。 ### Stripeの郵便番号検証 Stripeのような決済方法を使用する場合、カード検証に必要なのは郵便番号と国のみであることがよくあります。`stripe`プロパティを`true`に設定すると、これら2つのフィールドのみを含む簡易フォームがレンダリングされます。 ```tsx AddressForm for Stripe icon=logos:stripe import { FormProvider, useForm } from 'react-hook-form'; import { Button, Stack } from '@mui/material'; import AddressForm from './AddressForm'; // インポートパスを調整してください export default function StripeAddressExample() { const methods = useForm({ defaultValues: { billing_address: { postal_code: '', country: 'US', // デフォルトの国 }, }, }); const onSubmit = (data) => { console.log('Form data:', data); }; return ( <FormProvider {...methods}> <form onSubmit={methods.handleSubmit(onSubmit)}> <Stack spacing={2}> <AddressForm stripe={true} /> <Button type="submit" variant="contained"> Submit </Button> </Stack> </form> </FormProvider> ); } ``` ## バリデーション このコンポーネントには、必須フィールドに対する自動バリデーションが含まれています。最も注目すべき機能は、動的な郵便番号バリデーションであり、選択された国に基づいてルールを調整します。 - **必須フィールド**: 表示されるすべてのフィールドは自動的に必須としてマークされます。 - **郵便番号**: バリデーションロジックは`validator/lib/isPostalCode`ライブラリを使用します。選択された国の標準形式(例:米国の場合は5桁、カナダの場合は英数字)に対して郵便番号の形式をチェックします。国の形式が明示的にサポートされていない場合は、一般的なバリデーションが適用されます。 - **カスタムバリデーション**: `fieldValidation`プロパティを介して追加のバリデーションルールを渡すことができます。例えば、`state`フィールドに特定のパターンを適用するには: ```tsx const customValidation = { 'billing_address.state': { pattern: '^[A-Z]{2}$', pattern_message: { en: '州は2文字のコードでなければなりません。', }, }, }; <AddressForm mode="required" fieldValidation={customValidation} />; ```