メインコンテンツまでスキップ

基本情報編集ブロック

EditBasicInformation は、MUI 上に構築された制御された住所・プロフィールフォームブロックです。

インストール

npm install @nodeblocks/frontend-edit-basic-information-block

必要なもの

項目理由
data制御されたフォーム状態。既定の形では NameInputFuriganaInputPostalCodeInputPrefectureSelectCityInputAddressInputPhoneInput を使います。
onDataChange変更されたフィールドパスに関するメタデータとともに、次のデータスナップショットを受け取ります。
errors (optional)フィールドパスをキーにしたフィールドレベルのバリデーションフィードバック。
labels (optional)タイトル、サブタイトル、入力ラベル、検索ボタン、送信ボタンの文言です。
placeholders (optional)テキスト入力と都道府県セレクトのプレースホルダーテキストです。
selectOptions (optional)都道府県セレクト用のカスタムオプション一覧です。
onSearchAddressClick (optional)郵便番号による住所検索ボタンを処理します。
blockSpacingBefore (optional)特定のデフォルトブロックまたはオーバーライドブロックの前の余白を調整します。
children (optional)複合コンポーネントまたはブロックのオーバーライド描画を使用します。
制御コンポーネント

EditBasicInformation はフォーム状態を所有しません。data はアプリ側で保持し、更新は onDataChange 経由で渡してください。標準の形は Storybook で使われている名前付きフィールドのオブジェクトで、後でネストしたバリデーションが必要な場合は FieldErrorMap がブラケット記法のパスを使います。

コード例

ライブエディター
function Example() {
  const defaultData = {
    NameInput: '山田太郎',
    FuriganaInput: 'ヤマダタロウ',
    PostalCodeInput: '1234567',
    PrefectureSelect: '東京都',
    CityInput: '市区町村を入力',
    AddressInput: '町名・番地・建物を入力',
    PhoneInput: '電話番号を入力(ハイフンなしで入力)',
  };

  const [data, setData] = React.useState(defaultData);

  return (
    <EditBasicInformation
      data={data}
      onDataChange={(nextData) => {
        setData(nextData);
      }}
      onSearchAddressClick={() => {
        setData((current) => ({ ...current }));
      }}
    />
  );
}
結果
Loading...

重要な props

基本 props

Prop必須既定値説明
dataEditBasicInformationFormDataYes-制御されたフォーム状態。既定のストーリー形状は、上に列挙した名前付きフィールドを使います。
onDataChange(data: EditBasicInformationFormData, meta: { name: string; value: unknown; cause: one of input, change, blur, clear, reset, programmatic; event?: React.SyntheticEvent }) => voidYes-フィールドが更新されるたびに呼び出されます。meta.name はブラケット記法のパスを使います。
errors{ [fieldPath: string]: string | string[] }Noundefinedフィールドパスをキーにしたバリデーションフィードバック。
onSearchAddressClickMouseEventHandler<HTMLButtonElement>Noundefined指定すると、郵便番号検索アクションとして表示されます。

コンテンツ props

Prop必須既定値説明
labels{ title?: string; subtitle?: string; nameInput?: string; furiganaInput?: string; postalCodeInput?: string; searchAddressButton?: string; prefectureSelect?: string; cityInput?: string; addressInput?: string; phoneInput?: string; submitButton?: string }Noundefinedタイトル、補助テキスト、入力ラベル、検索ボタン、送信ボタンの文言。
placeholders{ nameInput?: string; furiganaInput?: string; postalCodeInput?: string; prefectureSelect?: string; cityInput?: string; addressInput?: string; phoneInput?: string }Noundefinedテキストフィールドと都道府県セレクトのプレースホルダー文言。
selectOptions{ prefectureSelect?: { value: string; label: string }[] }Noundefined都道府県セレクト用のカスタムオプション。

レイアウトと構成 props

Prop必須既定値説明
componentStackProps<'form'>['component']No'form'外側の Stack によって描画されるルート要素。
blockSpacingBeforePartial<Record<string, number | Partial<Record<'xs' | 'sm' | 'md' | 'lg' | 'xl', number>>>>No{ subtitle: 4, nameInput: { xs: 4, sm: 3 }, submitButton: 4 }名前付きデフォルトブロックまたは関数ベースのオーバーライドブロックの前に追加する余白。
childrenBlocksOverride<typeof defaultBlocks, CustomBlocks>NoundefinedJSX の複合コンポーネント、または blocksblockOrder を返す関数を使用します。

継承される props は StackProps<'form'> 由来で、children がブロックのオーバーライド API に置き換えられているため、classNamesxid などの標準的な form/container props を利用できます。

デフォルト UI ブロック

ブロック基盤備考
EditBasicInformationStackパディングとレスポンシブレイアウトを備えたルート form シェルです。
TitleTypographyvariant="h4", component="h2", 太字で中央揃え。既定値は 基本情報を編集 です。
SubtitleTypographyvariant="body2"。既定値は * は必須事項です です。
NameInputTextField既定のラベルは 氏名、プレースホルダーは 氏名を入力 です。
FuriganaInputTextField既定のラベルは フリガナ、プレースホルダーは フリガナを入力 です。
PostalCodeInputTextField + Button既定のラベルは 郵便番号、プレースホルダーは 郵便番号を入力、検索ボタンは 住所を検索 です。
PrefectureSelectFormControl + InputLabel + Select既定のラベルは 都道府県、プレースホルダーは 都道府県を選択、組み込みの都道府県オプションを使います。
CityInputTextField既定のラベルは 市区町村、プレースホルダーは 市区町村を入力 です。
AddressInputTextField既定のラベルは 町名・番地・建物、プレースホルダーは 町名・番地・建物を入力 です。
PhoneInputTextField既定のラベルは 連絡先電話番号、プレースホルダーは 電話番号を入力(ハイフンなしで入力) です。
SubmitButtonButtonvariant="contained", size="large", type="submit"、中央揃えでデスクトップでは広めの幅になります。既定値は 保存 です。

追加のフィールドプリミティブ

プリミティブ主な props継承基盤備考
Inputname, label, placeholder, requiredTextFieldProps plus getValue, setValue, and errors from contextTextField標準レイアウトで使われる制御されたテキストフィールドのプリミティブです。カスタムフローでは利用できますが、既定のブロック順では直接描画されません。

TypeScript

type EditBasicInformationFormData =
| {
NameInput: string;
FuriganaInput: string;
PostalCodeInput: string;
PrefectureSelect: string;
CityInput: string;
AddressInput: string;
PhoneInput: string;
}
| Record<string, unknown>;