メインコンテンツへスキップ

useConnect

useConnectフックは、DidConnect UIモーダルをプログラムで開閉・管理するための強力な方法を提供します。宣言的なButtonコンポーネントが提供するものよりも接続フローをより詳細に制御する必要がある場合、例えばカスタムUI要素、メニュー項目、またはアプリケーションイベントに応じてモ

useConnectフックは、DidConnect UIモーダルをプログラムで開閉・管理するための強力な方法を提供します。宣言的なButtonコンポーネントが提供するものよりも接続フローをより詳細に制御する必要がある場合、例えばカスタムUI要素、メニュー項目、またはアプリケーションイベントに応じてモーダルをトリガーする場合に理想的なソリューションです。

このフックはButtonコンポーネントの背後にあるエンジンであり、同じコア機能への直接アクセスを提供します。

仕組み

useConnectフックは、主に2つの要素を返します:

  1. `connectHolder`

    コンポーネントツリーにレンダリングする必要があるReact要素です。この要素は、DidConnectモーダルがアクティブ化されたときにそれをレンダリングする責任があります。open関数が呼び出されるまで非表示のままです。

  2. `connectApi`

    モーダルのライフサイクルを制御するために使用する関数(opencloseopenPopuploginOAuth)を含むオブジェクトです。

useConnect

セットアップ

フックを使用するには、それをインポートし、コンポーネント内で呼び出します。次に、アプリケーションのどこか、できればトップレベルのコンポーネントでconnectHolderをレンダリングして、モーダルが他のすべてのコンテンツの上にオーバーレイできるようにします。

Basic Setup

javascript
import React from 'react';
import { useConnect } from '@arcblock/did-connect-react';

function MyComponent() {
  // 1. フックを初期化する
  const { connectHolder, connectApi } = useConnect();

  const handleLogin = () => {
    // 2. API を使用してモーダルを開く
    connectApi.open({
      action: 'login',
      onSuccess: (result) => {
        console.log('ログイン成功!', result);
      },
      onClose: () => {
        console.log('モーダルがユーザーによって閉じられました。');
      }
    });
  };

  return (
    <div>
      <button type="button" onClick={handleLogin}>
        DIDでログイン
      </button>

      {/* 3. ホルダーコンポーネントをレンダリングする */}
      {connectHolder}
    </div>
  );
}

export default MyComponent;

APIリファレンス

connectApiオブジェクトは、接続プロセスを制御するための以下のメソッドを提供します。

connectApi.open(options)

これはDidConnectモーダルをトリガーして表示するための主要な関数です。接続セッションの動作、外観、およびコールバックを設定するための単一のoptionsオブジェクトを受け入れます。

パラメータ (options)

  • action string (required) — 接続リクエストの目的、例:login、claim、signなど。これはウォレット内のワークフローを決定します。
  • onSuccess (result: object) => void — ユーザーがウォレットでアクションを正常に完了したときに実行されるコールバック関数。resultオブジェクトにはウォレットからのレスポンスが含まれます。
  • onClose () => void — ユーザーがアクションを完了せずに手動でモーダルを閉じたときに実行されるコールバック関数。
  • onError (error: any) => void — タイムアウトやネットワークの問題など、プロセス中にエラーが発生した場合に実行されるコールバック関数。
  • messages ConnectMessages — モーダルに表示されるテキストをカスタマイズするためのオブジェクト。詳細はConnectMessages型を参照してください。
    • title string — モーダルのタイトル。
    • scan string — QRコードに付随するテキスト。
    • confirm string — 確認ステップのテキスト。
    • success ReactNode — 成功画面のコンテンツ。
  • popup boolean (default: true) — trueの場合、UIはモーダルダイアログとして表示されます。falseの場合、インラインでレンダリングされ、containerElの設定が必要です。
  • containerEl Element — popupがfalseに設定されている場合にDidConnectコンポーネントがレンダリングされるDOM要素。
  • closeTimeout number (default: 2000) — 接続成功後、モーダルが自動的に閉じるまでの遅延時間(ミリ秒)。
  • checkInterval number (default: 2000) — セッションステータスを確認するためにサーバーをポーリングする間隔(ミリ秒)。
  • checkTimeout number (default: 300000) — 接続試行がタイムアウトするまでの合計時間(ミリ秒)。
  • extraParams object (default: {}) — セッション作成リクエストに含める追加のパラメータで、サーバー側で取得できます。

connectApi.close()

DidConnectモーダルを手動で閉じます。モーダルは成功時またはユーザーによるキャンセル時に自動的に閉じますが、他の理由でプログラムから閉じる必要がある場合はこの関数を呼び出すことができます。

javascript
// 例:成功コールバックで短い遅延の後にモーダルを閉じる
connectApi.open({
  action: 'login',
  onSuccess: () => {
    showTemporarySuccessMessage();
    setTimeout(() => {
      connectApi.close();
    }, 1500);
  },
  closeTimeout: 999999 // 自動クローズを防止
});

connectApi.openPopup(params, options)

この関数は、現在のページ内のモーダルの代わりに、新しいブラウザのポップアップウィンドウでDID Connectフローを開く代替の接続方法を提供します。これは、特定のOAuthのようなフローや、モーダルを注入できないサイトとの統合に役立ちます。

パラメータ

  • params ConnectProps (required) — openメソッドのオプションに似ています。主な違いは、認証方法(例:「github」、「google」)を識別するためにparams.extraParams.providerが必須であることです。
  • options object — ポップアップウィンドウ自体の設定。
    • baseUrl string — ポップアップURLを構築するためのベースURL。
    • locale string (default: en) — ポップアップコンテンツのロケール。
    • popupOptions object — ポップアップのサイズや機能をカスタマイズするためにwindow.open()に直接渡されるオプション。

使用法

openPopup関数は、成功時に認証データで解決されるか、失敗またはキャンセル時に拒否されるPromiseを返します。

javascript
const handleGithubLogin = async () => {
  try {
    const result = await connectApi.openPopup({
      action: 'login',
      onSuccess: () => console.log('このコールバックもトリガーされます'),
      extraParams: { provider: 'github' } // これは必須です
    });
    console.log('ポップアップ経由でのログイン成功:', result);
  } catch (err) {
    if (err.message === 'Popup closed') {
      console.log('ユーザーがポップアップウィンドウを閉じました。');
    } else {
      console.error('エラーが発生しました:', err);
    }
  }
};

connectApi.loginOAuth(options)

これはOAuthログインフローを直接開始するためのヘルパー関数です。ライブラリの他の部分で内部的に使用される低レベルのユーティリティです。

パラメータ (options)

  • provider string (required) — 使用するOAuthプロバイダー、例:「github」、「google」。
  • action string (required) — アクション、通常は「login」。
  • extraParams object — OAuthフローの追加パラメータ。
  • onLogin function (required) — ログイン成功時に実行されるコールバック関数。