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

メールアドレス変更ブロック

ChangeEmail は MUI 上に構築された制御済みのメールアドレス変更フォームブロックです。

インストール

npm install @nodeblocks/frontend-change-email-block

必要なもの

項目重要な理由
dataフォーム state の単一の信頼できる情報源 (newEmail)
onDataChangeフィールド変更時に更新済み state とメタデータを受け取る
currentEmail (optional)新しいメールアドレス欄の上に表示される読み取り専用の現在のアドレス
errors (optional)フィールド単位のエラーフィードバックを表示する
制御されたコンポーネント

ChangeEmail はフォーム state を所有しません。state はアプリ側で保持し、data を通じて渡してください。

コード例

ライブエディター
function Example() {
  const defaultData = {newEmail: ''};

  const [data, setData] = React.useState(defaultData);
  const [errors, setErrors] = React.useState({});

  const handleDataChange = (nextData, meta) => {
    const {[meta.name]: _removed, ...restErrors} = errors;
    let nextErrors = restErrors;

    // Validate required fields on blur (same pattern as storybook)
    if (meta.cause === 'blur' && meta.name === 'newEmail') {
      if (!String(nextData.newEmail || '').trim()) {
        nextErrors = {...restErrors, newEmail: 'New email is required.'};
      }
    }

    setErrors(nextErrors);
    setData(nextData);
  };

  return (
    <ChangeEmail
      data={data}
      errors={Object.keys(errors).length ? errors : undefined}
      currentEmail="user@example.com"
      onDataChange={handleDataChange}
      onSubmit={e => {
        e.preventDefault();
        alert(`Submit:\n${JSON.stringify(data, null, 2)}`);
      }}
    />
  );
}
結果
Loading...

重要な props

コア props

PropTypeRequiredDefaultDescription
dataChangeEmailFormData ({ newEmail? } or extended Record<string, unknown>)Yes-現在のフォーム data オブジェクト
onDataChange(data, meta) => voidYes-更新時に呼び出されます。meta には name, value, cause (input, change, blur, clear, reset, programmatic), optional event が含まれます
errors{ [fieldName: string]: string | string[] }Noundefineddata のフィールド名(例: newEmail)に紐づくフィールドエラー

コンテンツ props

PropTypeRequiredDefaultDescription
currentEmailstringNoundefined読み取り専用の現在のメールアドレス
labels{ currentEmailDisplay?: string }NocurrentEmailDisplay: '現在のメールアドレス'現在のメール表示に対するラベルのみ。タイトル、フィールド、ボタンの文言はサブコンポーネントの props で上書きしてください。

レイアウトと構成 props

PropTypeRequiredDefaultDescription
childrenBlocksOverride | ReactNodeNoundefinedデフォルトのブロックを上書きするか、カスタムの JSX children を提供します
componentReact.ElementTypeNo'form'ルート要素の型
classNamestringNoundefinedルートコンテナのクラス名
sxSxPropsNoundefinedルートコンテナ向けの MUI システムスタイル

ChangeEmailStackProps<'form'>children を除く)も継承するため、onSubmitidnoValidate などの標準的なフォーム props がサポートされます。オーバーライドなしのデフォルトのブロック順は title, form (defaultBlockOrder) です。

デフォルト UI ブロック

BlockBuilt onNotes
ChangeEmail (root)Stack (component="form")制御されたフォームコンテナ。内部コンテンツの最大幅は 684px
ChangeEmail.TitleTypographyタイトル(variant="h6")。デフォルト メールアドレスを変更
ChangeEmail.FormStackフォームフィールドのコンテナ(送信はルート form が処理)
ChangeEmail.Form.CurrentEmailDisplayTypography + Stack読み取り専用の現在のメール。ラベルのデフォルトは 現在のメールアドレスlabels.currentEmailDisplay 経由)、値はルートの currentEmail を使用
ChangeEmail.Form.NewEmailFieldTextField新しいメール(name="newEmail", type="text", autoComplete="new-email", fullWidth)。デフォルトは 新しいメールアドレス / 新しいメールアドレスを入力
ChangeEmail.Form.ChangeEmailButtonButton送信ボタン(variant="contained", type="submit")。デフォルト メールアドレスを変更

TypeScript

import {ChangeEmail, ChangeEmailFormData} from '@nodeblocks/frontend-change-email-block';

type MyChangeEmailData = ChangeEmailFormData & {
confirmToken?: string;
};