@arcblock/did-connect-react 3.4.14 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/standalone/did-connect-react.css +1 -0
- package/dist/standalone/index.js +133700 -0
- package/lib/Connect/components/login-item/connect-choose-list.js +111 -111
- package/lib/Connect/components/login-item/connect-provider-list.js +180 -180
- package/lib/Connect/components/login-item/mobile-login-item.js +56 -56
- package/lib/Connect/components/login-item/passkey-login-item.js +27 -29
- package/lib/Connect/components/login-item/web-login-item.js +31 -29
- package/lib/Connect/connect.js +202 -197
- package/lib/Connect/contexts/state.js +19 -17
- package/lib/Connect/hooks/provider-list.js +33 -33
- package/lib/Connect/plugins/email/list-item.js +14 -14
- package/lib/Connect/plugins/email/placeholder.js +77 -76
- package/lib/package.json.js +1 -1
- package/package.json +14 -9
- package/.aigne/doc-smith/config.yaml +0 -85
- package/.aigne/doc-smith/history.yaml +0 -6
- package/.aigne/doc-smith/output/structure-plan.json +0 -204
- package/.aigne/doc-smith/translation-cache.yaml +0 -11
- package/.aigne/doc-smith/upload-cache.yaml +0 -213
- package/docs/_sidebar.md +0 -18
- package/docs/advanced-authentication-methods.ja.md +0 -261
- package/docs/advanced-authentication-methods.md +0 -261
- package/docs/advanced-authentication-methods.zh-TW.md +0 -261
- package/docs/advanced-authentication-methods.zh.md +0 -261
- package/docs/advanced-utilities.ja.md +0 -132
- package/docs/advanced-utilities.md +0 -132
- package/docs/advanced-utilities.zh-TW.md +0 -132
- package/docs/advanced-utilities.zh.md +0 -132
- package/docs/advanced.ja.md +0 -95
- package/docs/advanced.md +0 -95
- package/docs/advanced.zh-TW.md +0 -95
- package/docs/advanced.zh.md +0 -95
- package/docs/api-reference.ja.md +0 -178
- package/docs/api-reference.md +0 -178
- package/docs/api-reference.zh-TW.md +0 -178
- package/docs/api-reference.zh.md +0 -178
- package/docs/assets/diagram/core-components-session-provider-01.ja.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.zh-TW.jpg +0 -0
- package/docs/assets/diagram/core-components-session-provider-01.zh.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.ja.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.zh-TW.jpg +0 -0
- package/docs/assets/diagram/did-connect-diagram-0.zh.jpg +0 -0
- package/docs/assets/diagram/overview-01.ja.jpg +0 -0
- package/docs/assets/diagram/overview-01.jpg +0 -0
- package/docs/assets/diagram/overview-01.zh-TW.jpg +0 -0
- package/docs/assets/diagram/overview-01.zh.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.ja.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.zh-TW.jpg +0 -0
- package/docs/assets/diagram/use-connect-diagram-0.zh.jpg +0 -0
- package/docs/core-components-did-connect.ja.md +0 -166
- package/docs/core-components-did-connect.md +0 -166
- package/docs/core-components-did-connect.zh-TW.md +0 -166
- package/docs/core-components-did-connect.zh.md +0 -166
- package/docs/core-components-session-provider.ja.md +0 -197
- package/docs/core-components-session-provider.md +0 -197
- package/docs/core-components-session-provider.zh-TW.md +0 -197
- package/docs/core-components-session-provider.zh.md +0 -197
- package/docs/core-components.ja.md +0 -16
- package/docs/core-components.md +0 -16
- package/docs/core-components.zh-TW.md +0 -16
- package/docs/core-components.zh.md +0 -16
- package/docs/getting-started.ja.md +0 -138
- package/docs/getting-started.md +0 -138
- package/docs/getting-started.zh-TW.md +0 -138
- package/docs/getting-started.zh.md +0 -138
- package/docs/hooks-use-connect.ja.md +0 -178
- package/docs/hooks-use-connect.md +0 -178
- package/docs/hooks-use-connect.zh-TW.md +0 -178
- package/docs/hooks-use-connect.zh.md +0 -178
- package/docs/hooks-use-did.ja.md +0 -107
- package/docs/hooks-use-did.md +0 -107
- package/docs/hooks-use-did.zh-TW.md +0 -107
- package/docs/hooks-use-did.zh.md +0 -107
- package/docs/hooks-use-oauth-passkey.ja.md +0 -188
- package/docs/hooks-use-oauth-passkey.md +0 -188
- package/docs/hooks-use-oauth-passkey.zh-TW.md +0 -188
- package/docs/hooks-use-oauth-passkey.zh.md +0 -188
- package/docs/hooks.ja.md +0 -23
- package/docs/hooks.md +0 -23
- package/docs/hooks.zh-TW.md +0 -23
- package/docs/hooks.zh.md +0 -23
- package/docs/overview.ja.md +0 -119
- package/docs/overview.md +0 -119
- package/docs/overview.zh-TW.md +0 -119
- package/docs/overview.zh.md +0 -119
- package/docs/ui-components-address.ja.md +0 -121
- package/docs/ui-components-address.md +0 -121
- package/docs/ui-components-address.zh-TW.md +0 -121
- package/docs/ui-components-address.zh.md +0 -121
- package/docs/ui-components-avatar.ja.md +0 -65
- package/docs/ui-components-avatar.md +0 -65
- package/docs/ui-components-avatar.zh-TW.md +0 -65
- package/docs/ui-components-avatar.zh.md +0 -65
- package/docs/ui-components-button.ja.md +0 -99
- package/docs/ui-components-button.md +0 -99
- package/docs/ui-components-button.zh-TW.md +0 -99
- package/docs/ui-components-button.zh.md +0 -99
- package/docs/ui-components-logo.ja.md +0 -52
- package/docs/ui-components-logo.md +0 -52
- package/docs/ui-components-logo.zh-TW.md +0 -52
- package/docs/ui-components-logo.zh.md +0 -52
- package/docs/ui-components.ja.md +0 -57
- package/docs/ui-components.md +0 -57
- package/docs/ui-components.zh-TW.md +0 -57
- package/docs/ui-components.zh.md +0 -57
- package/glossary.md +0 -1
- package/src/Address/index.jsx +0 -2
- package/src/Avatar/index.jsx +0 -2
- package/src/Button/Button.stories.jsx +0 -7
- package/src/Button/index.jsx +0 -21
- package/src/Connect/Connect.stories.jsx +0 -34
- package/src/Connect/assets/locale.js +0 -149
- package/src/Connect/assets/login-bg.png +0 -0
- package/src/Connect/assets/login-slogan.js +0 -7
- package/src/Connect/components/action-button.jsx +0 -22
- package/src/Connect/components/app-tips.jsx +0 -156
- package/src/Connect/components/auto-height.jsx +0 -38
- package/src/Connect/components/back-button.jsx +0 -24
- package/src/Connect/components/connect-status.jsx +0 -259
- package/src/Connect/components/did-connect-title.jsx +0 -107
- package/src/Connect/components/download-tips.jsx +0 -55
- package/src/Connect/components/loading.jsx +0 -25
- package/src/Connect/components/login-item/connect-choose-list.jsx +0 -317
- package/src/Connect/components/login-item/connect-provider-list.jsx +0 -462
- package/src/Connect/components/login-item/login-method-item.jsx +0 -139
- package/src/Connect/components/login-item/mobile-login-item.jsx +0 -181
- package/src/Connect/components/login-item/passkey-login-item.jsx +0 -54
- package/src/Connect/components/login-item/wallet-login-options.jsx +0 -129
- package/src/Connect/components/login-item/web-login-item.jsx +0 -157
- package/src/Connect/components/mask-overlay.jsx +0 -32
- package/src/Connect/components/refresh-overlay.jsx +0 -52
- package/src/Connect/components/switch-app.jsx +0 -69
- package/src/Connect/connect.jsx +0 -617
- package/src/Connect/contexts/state.jsx +0 -234
- package/src/Connect/fallback-connect.jsx +0 -47
- package/src/Connect/fullpage.jsx +0 -3
- package/src/Connect/hooks/auth-url.js +0 -31
- package/src/Connect/hooks/method-list.js +0 -121
- package/src/Connect/hooks/page-show.js +0 -24
- package/src/Connect/hooks/provider-list.js +0 -165
- package/src/Connect/hooks/security.js +0 -40
- package/src/Connect/hooks/token.js +0 -627
- package/src/Connect/hooks/use-apps.js +0 -69
- package/src/Connect/hooks/use-quick-connect.js +0 -119
- package/src/Connect/index.jsx +0 -21
- package/src/Connect/landing-page.jsx +0 -3
- package/src/Connect/plugins/email/index.jsx +0 -85
- package/src/Connect/plugins/email/list-item.jsx +0 -34
- package/src/Connect/plugins/email/placeholder.jsx +0 -365
- package/src/Connect/plugins/index.js +0 -2
- package/src/Connect/use-connect.jsx +0 -321
- package/src/Connect/with-blocklet.jsx +0 -26
- package/src/Connect/with-bridge-call.jsx +0 -138
- package/src/Federated/context.jsx +0 -93
- package/src/Federated/index.jsx +0 -1
- package/src/Logo/index.jsx +0 -2
- package/src/OAuth/bind-conflict-alert.jsx +0 -37
- package/src/OAuth/context.jsx +0 -407
- package/src/OAuth/guest.svg +0 -20
- package/src/OAuth/index.jsx +0 -1
- package/src/OAuth/passport-switcher.jsx +0 -2
- package/src/Passkey/actions.jsx +0 -217
- package/src/Passkey/constants.js +0 -2
- package/src/Passkey/context.jsx +0 -395
- package/src/Passkey/dialog.jsx +0 -401
- package/src/Passkey/icon.jsx +0 -10
- package/src/Passkey/index.jsx +0 -2
- package/src/Service/index.jsx +0 -96
- package/src/Session/assets/did-spaces-guide-cover.svg +0 -1
- package/src/Session/assets/did-spaces-guide-icon.svg +0 -7
- package/src/Session/context.jsx +0 -7
- package/src/Session/did-spaces-guide.jsx +0 -173
- package/src/Session/handler.jsx +0 -98
- package/src/Session/hooks/use-federated.js +0 -91
- package/src/Session/hooks/use-mobile.jsx +0 -6
- package/src/Session/hooks/use-protected-routes.js +0 -16
- package/src/Session/hooks/use-session-token.js +0 -400
- package/src/Session/hooks/use-verify.jsx +0 -76
- package/src/Session/index.jsx +0 -1789
- package/src/Session/libs/constants.js +0 -17
- package/src/Session/libs/did-spaces.js +0 -38
- package/src/Session/libs/federated.js +0 -82
- package/src/Session/libs/index.js +0 -5
- package/src/Session/libs/locales.js +0 -160
- package/src/Session/libs/login-mobile.js +0 -80
- package/src/Session/window-focus-aware.jsx +0 -28
- package/src/SessionManager/index.jsx +0 -2
- package/src/Storage/engine/cookie.js +0 -25
- package/src/Storage/engine/local-storage.js +0 -57
- package/src/Storage/index.js +0 -25
- package/src/User/index.js +0 -4
- package/src/User/use-did.js +0 -80
- package/src/User/wrap-did.jsx +0 -18
- package/src/WebWalletSWKeeper/index.jsx +0 -3
- package/src/components/PassportSwitcher.jsx +0 -160
- package/src/constant.js +0 -27
- package/src/error.js +0 -6
- package/src/hooks/use-locale.jsx +0 -6
- package/src/index.js +0 -32
- package/src/locales/en.jsx +0 -15
- package/src/locales/index.jsx +0 -13
- package/src/locales/zh.jsx +0 -15
- package/src/types.d.ts +0 -355
- package/src/utils.js +0 -413
- package/vite.config.mjs +0 -29
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
# useConnect
|
|
2
|
-
|
|
3
|
-
`useConnect` hook 提供了一種強大的程式化方式來開啟、關閉和管理 `DidConnect` UI 模態框。當您需要比宣告式 `Button` 元件提供更多對連線流程的控制時,例如從自訂 UI 元素、選單項目或響應應用程式事件來觸發模態框,這便是理想的解決方案。
|
|
4
|
-
|
|
5
|
-
這個 hook 是 `Button` 元件背後的引擎,讓您可以直接存取相同的核心功能。
|
|
6
|
-
|
|
7
|
-
## 運作方式
|
|
8
|
-
|
|
9
|
-
`useConnect` hook 回傳兩個主要元素:
|
|
10
|
-
|
|
11
|
-
1. **`connectHolder`**:一個必須在您的元件樹中渲染的 React 元素。此元素負責在 `DidConnect` 模態框被啟動時進行渲染。在 `open` 函式被呼叫前,它保持不可見。
|
|
12
|
-
2. **`connectApi`**:一個包含您將用來控制模態框生命週期的函式(`open`、`close`、`openPopup`、`loginOAuth`)的物件。
|
|
13
|
-
|
|
14
|
-
<!-- DIAGRAM_IMAGE_START:flowchart:4:3:1765962229 -->
|
|
15
|
-

|
|
16
|
-
<!-- DIAGRAM_IMAGE_END -->
|
|
17
|
-
|
|
18
|
-
## 設定
|
|
19
|
-
|
|
20
|
-
若要使用此 hook,請在您的元件中匯入並呼叫它。然後,確保您在應用程式的某處渲染 `connectHolder`,最好是在頂層元件中,以確保模態框可以覆蓋所有其他內容。
|
|
21
|
-
|
|
22
|
-
```javascript Basic Setup icon=logos:javascript
|
|
23
|
-
import React from 'react';
|
|
24
|
-
import { useConnect } from '@arcblock/did-connect-react';
|
|
25
|
-
|
|
26
|
-
function MyComponent() {
|
|
27
|
-
// 1. 初始化 hook
|
|
28
|
-
const { connectHolder, connectApi } = useConnect();
|
|
29
|
-
|
|
30
|
-
const handleLogin = () => {
|
|
31
|
-
// 2. 使用 API 開啟模態框
|
|
32
|
-
connectApi.open({
|
|
33
|
-
action: 'login',
|
|
34
|
-
onSuccess: (result) => {
|
|
35
|
-
console.log('登入成功!', result);
|
|
36
|
-
},
|
|
37
|
-
onClose: () => {
|
|
38
|
-
console.log('模態框已由使用者關閉。');
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
return (
|
|
44
|
-
<div>
|
|
45
|
-
<button type="button" onClick={handleLogin}>
|
|
46
|
-
使用 DID 登入
|
|
47
|
-
</button>
|
|
48
|
-
|
|
49
|
-
{/* 3. 渲染 holder 元件 */}
|
|
50
|
-
{connectHolder}
|
|
51
|
-
</div>
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export default MyComponent;
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## API 參考
|
|
59
|
-
|
|
60
|
-
`connectApi` 物件提供以下方法來控制連線過程。
|
|
61
|
-
|
|
62
|
-
### `connectApi.open(options)`
|
|
63
|
-
|
|
64
|
-
這是觸發並顯示 `DidConnect` 模態框的主要函式。它接受一個 `options` 物件來設定連線會話的行為、外觀和回呼。
|
|
65
|
-
|
|
66
|
-
**參數 (`options`)**
|
|
67
|
-
|
|
68
|
-
<x-field-group>
|
|
69
|
-
<x-field data-name="action" data-type="string" data-required="true">
|
|
70
|
-
<x-field-desc markdown>連線請求的目的,例如 `login`、`claim`、`sign` 等。這決定了錢包內的工作流程。</x-field-desc>
|
|
71
|
-
</x-field>
|
|
72
|
-
<x-field data-name="onSuccess" data-type="(result: object) => void" data-required="false">
|
|
73
|
-
<x-field-desc markdown>當使用者在錢包中成功完成操作時執行的回呼函式。`result` 物件包含來自錢包的回應。</x-field-desc>
|
|
74
|
-
</x-field>
|
|
75
|
-
<x-field data-name="onClose" data-type="() => void" data-required="false">
|
|
76
|
-
<x-field-desc markdown>當使用者在未完成操作的情況下手動關閉模態框時執行的回呼函式。</x-field-desc>
|
|
77
|
-
</x-field>
|
|
78
|
-
<x-field data-name="onError" data-type="(error: any) => void" data-required="false">
|
|
79
|
-
<x-field-desc markdown>如果在過程中發生錯誤(例如超時或網路問題)時執行的回呼函式。</x-field-desc>
|
|
80
|
-
</x-field>
|
|
81
|
-
<x-field data-name="messages" data-type="ConnectMessages" data-required="false">
|
|
82
|
-
<x-field-desc markdown>用於自訂模態框中顯示文字的物件。詳情請參閱 `ConnectMessages` 型別。</x-field-desc>
|
|
83
|
-
<x-field data-name="title" data-type="string" data-desc="模態框標題。"></x-field>
|
|
84
|
-
<x-field data-name="scan" data-type="string" data-desc="QR code 旁的文字。"></x-field>
|
|
85
|
-
<x-field data-name="confirm" data-type="string" data-desc="確認步驟的文字。"></x-field>
|
|
86
|
-
<x-field data-name="success" data-type="ReactNode" data-desc="成功畫面的內容。"></x-field>
|
|
87
|
-
</x-field>
|
|
88
|
-
<x-field data-name="popup" data-type="boolean" data-default="true">
|
|
89
|
-
<x-field-desc markdown>若為 `true`,UI 將以模態對話框形式顯示。若為 `false`,則會內聯渲染,需要設定 `containerEl`。</x-field-desc>
|
|
90
|
-
</x-field>
|
|
91
|
-
<x-field data-name="containerEl" data-type="Element" data-required="false">
|
|
92
|
-
<x-field-desc markdown>當 `popup` 設為 `false` 時,`DidConnect` 元件將在此 DOM 元素中渲染。</x-field-desc>
|
|
93
|
-
</x-field>
|
|
94
|
-
<x-field data-name="closeTimeout" data-type="number" data-default="2000">
|
|
95
|
-
<x-field-desc markdown>連線成功後,模態框自動關閉前的延遲時間(毫秒)。</x-field-desc>
|
|
96
|
-
</x-field>
|
|
97
|
-
<x-field data-name="checkInterval" data-type="number" data-default="2000">
|
|
98
|
-
<x-field-desc markdown>輪詢伺服器以檢查會話狀態的間隔時間(毫秒)。</x-field-desc>
|
|
99
|
-
</x-field>
|
|
100
|
-
<x-field data-name="checkTimeout" data-type="number" data-default="300000">
|
|
101
|
-
<x-field-desc markdown>連線嘗試超時前的總時間(毫秒)。</x-field-desc>
|
|
102
|
-
</x-field>
|
|
103
|
-
<x-field data-name="extraParams" data-type="object" data-default="{}">
|
|
104
|
-
<x-field-desc markdown>要包含在會話建立請求中的任何額外參數,這些參數可以在伺服器端擷取。</x-field-desc>
|
|
105
|
-
</x-field>
|
|
106
|
-
</x-field-group>
|
|
107
|
-
|
|
108
|
-
### `connectApi.close()`
|
|
109
|
-
|
|
110
|
-
手動關閉 `DidConnect` 模態框。模態框在成功或使用者取消時會自動關閉,但如果您因其他原因需要以程式化方式關閉它,可以呼叫此函式。
|
|
111
|
-
|
|
112
|
-
```javascript icon=lucide:x-circle
|
|
113
|
-
// 範例:在成功回呼中短暫延遲後關閉模態框
|
|
114
|
-
connectApi.open({
|
|
115
|
-
action: 'login',
|
|
116
|
-
onSuccess: () => {
|
|
117
|
-
showTemporarySuccessMessage();
|
|
118
|
-
setTimeout(() => {
|
|
119
|
-
connectApi.close();
|
|
120
|
-
}, 1500);
|
|
121
|
-
},
|
|
122
|
-
closeTimeout: 999999 // 防止自動關閉
|
|
123
|
-
});
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### `connectApi.openPopup(params, options)`
|
|
127
|
-
|
|
128
|
-
此函式提供了一種替代的連線方法,它會在新的瀏覽器彈出視窗中開啟 DID Connect 流程,而不是在當前頁面內的模態框中。這對於某些類似 OAuth 的流程或與無法注入模態框的網站整合時非常有用。
|
|
129
|
-
|
|
130
|
-
**參數**
|
|
131
|
-
|
|
132
|
-
<x-field-group>
|
|
133
|
-
<x-field data-name="params" data-type="ConnectProps" data-required="true">
|
|
134
|
-
<x-field-desc markdown>與 `open` 方法的選項類似。一個關鍵區別是 `params.extraParams.provider` 是**必需的**,用於識別驗證方法(例如 'github'、'google')。</x-field-desc>
|
|
135
|
-
</x-field>
|
|
136
|
-
<x-field data-name="options" data-type="object" data-required="false">
|
|
137
|
-
<x-field-desc markdown>彈出視窗本身的設定。</x-field-desc>
|
|
138
|
-
<x-field data-name="baseUrl" data-type="string" data-desc="用於建構彈出視窗 URL 的基礎 URL。"></x-field>
|
|
139
|
-
<x-field data-name="locale" data-type="string" data-default="en" data-desc="彈出視窗內容的語系。"></x-field>
|
|
140
|
-
<x-field data-name="popupOptions" data-type="object" data-desc="直接傳遞給 `window.open()` 的選項,用於自訂彈出視窗的大小和功能。"></x-field>
|
|
141
|
-
</x-field>
|
|
142
|
-
</x-field-group>
|
|
143
|
-
|
|
144
|
-
**用法**
|
|
145
|
-
|
|
146
|
-
`openPopup` 函式回傳一個 `Promise`,在成功時會解析並帶有驗證資料,在失敗或取消時則會拒絕。
|
|
147
|
-
|
|
148
|
-
```javascript icon=lucide:external-link
|
|
149
|
-
const handleGithubLogin = async () => {
|
|
150
|
-
try {
|
|
151
|
-
const result = await connectApi.openPopup({
|
|
152
|
-
action: 'login',
|
|
153
|
-
onSuccess: () => console.log('此回呼也會被觸發'),
|
|
154
|
-
extraParams: { provider: 'github' } // 此為必需項
|
|
155
|
-
});
|
|
156
|
-
console.log('透過彈出視窗登入成功:', result);
|
|
157
|
-
} catch (err) {
|
|
158
|
-
if (err.message === 'Popup closed') {
|
|
159
|
-
console.log('使用者已關閉彈出視窗。');
|
|
160
|
-
} else {
|
|
161
|
-
console.error('發生錯誤:', err);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### `connectApi.loginOAuth(options)`
|
|
168
|
-
|
|
169
|
-
這是一個輔助函式,用於直接啟動 OAuth 登入流程。它是一個較低層級的工具,由函式庫的其他部分在內部使用。
|
|
170
|
-
|
|
171
|
-
**參數 (`options`)**
|
|
172
|
-
|
|
173
|
-
<x-field-group>
|
|
174
|
-
<x-field data-name="provider" data-type="string" data-required="true" data-desc="要使用的 OAuth 提供者,例如 'github'、'google'。"></x-field>
|
|
175
|
-
<x-field data-name="action" data-type="string" data-required="true" data-desc="操作,通常是 'login'。"></x-field>
|
|
176
|
-
<x-field data-name="extraParams" data-type="object" data-required="false" data-desc="OAuth 流程的額外參數。"></x-field>
|
|
177
|
-
<x-field data-name="onLogin" data-type="function" data-required="true" data-desc="登入成功後執行的回呼函式。"></x-field>
|
|
178
|
-
</x-field-group>
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
# useConnect
|
|
2
|
-
|
|
3
|
-
`useConnect` hook 提供了一种强大的、编程化的方式来打开、关闭和管理 `DidConnect` UI 模态框。当您需要比声明式的 `Button` 组件提供更多对连接流程的控制时,例如从自定义 UI 元素、菜单项或响应应用程序事件来触发模态框,它就是理想的解决方案。
|
|
4
|
-
|
|
5
|
-
此 hook 是 `Button` 组件背后的引擎,让您可以直接访问相同的核心功能。
|
|
6
|
-
|
|
7
|
-
## 工作原理
|
|
8
|
-
|
|
9
|
-
`useConnect` hook 返回两个主要元素:
|
|
10
|
-
|
|
11
|
-
1. **`connectHolder`**:一个必须在组件树中渲染的 React 元素。此元素负责在 `DidConnect` 模态框被激活时进行渲染。在 `open` 函数被调用之前,它保持不可见。
|
|
12
|
-
2. **`connectApi`**:一个包含用于控制模态框生命周期的函数(`open`、`close`、`openPopup`、`loginOAuth`)的对象。
|
|
13
|
-
|
|
14
|
-
<!-- DIAGRAM_IMAGE_START:flowchart:4:3:1765962229 -->
|
|
15
|
-

|
|
16
|
-
<!-- DIAGRAM_IMAGE_END -->
|
|
17
|
-
|
|
18
|
-
## 设置
|
|
19
|
-
|
|
20
|
-
要使用此 hook,请在您的组件中导入并调用它。然后,确保在您的应用程序中的某个位置渲染 `connectHolder`,最好是在顶层组件中,以确保模态框可以覆盖所有其他内容。
|
|
21
|
-
|
|
22
|
-
```javascript Basic Setup icon=logos:javascript
|
|
23
|
-
import React from 'react';
|
|
24
|
-
import { useConnect } from '@arcblock/did-connect-react';
|
|
25
|
-
|
|
26
|
-
function MyComponent() {
|
|
27
|
-
// 1. 初始化 hook
|
|
28
|
-
const { connectHolder, connectApi } = useConnect();
|
|
29
|
-
|
|
30
|
-
const handleLogin = () => {
|
|
31
|
-
// 2. 使用 API 打开模态框
|
|
32
|
-
connectApi.open({
|
|
33
|
-
action: 'login',
|
|
34
|
-
onSuccess: (result) => {
|
|
35
|
-
console.log('登录成功!', result);
|
|
36
|
-
},
|
|
37
|
-
onClose: () => {
|
|
38
|
-
console.log('模态框被用户关闭。');
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
return (
|
|
44
|
-
<div>
|
|
45
|
-
<button type="button" onClick={handleLogin}>
|
|
46
|
-
Login with DID
|
|
47
|
-
</button>
|
|
48
|
-
|
|
49
|
-
{/* 3. 渲染 holder 组件 */}
|
|
50
|
-
{connectHolder}
|
|
51
|
-
</div>
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
export default MyComponent;
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## API 参考
|
|
59
|
-
|
|
60
|
-
`connectApi` 对象提供了以下方法来控制连接过程。
|
|
61
|
-
|
|
62
|
-
### `connectApi.open(options)`
|
|
63
|
-
|
|
64
|
-
这是触发和显示 `DidConnect` 模态框的主要函数。它接受一个 `options` 对象,用于配置连接会话的行为、外观和回调。
|
|
65
|
-
|
|
66
|
-
**参数 (`options`)**
|
|
67
|
-
|
|
68
|
-
<x-field-group>
|
|
69
|
-
<x-field data-name="action" data-type="string" data-required="true">
|
|
70
|
-
<x-field-desc markdown>连接请求的目的,例如 `login`、`claim`、`sign` 等。这决定了钱包内的操作流程。</x-field-desc>
|
|
71
|
-
</x-field>
|
|
72
|
-
<x-field data-name="onSuccess" data-type="(result: object) => void" data-required="false">
|
|
73
|
-
<x-field-desc markdown>当用户在钱包中成功完成操作时执行的回调函数。`result` 对象包含来自钱包的响应。</x-field-desc>
|
|
74
|
-
</x-field>
|
|
75
|
-
<x-field data-name="onClose" data-type="() => void" data-required="false">
|
|
76
|
-
<x-field-desc markdown>当用户在未完成操作的情况下手动关闭模态框时执行的回调函数。</x-field-desc>
|
|
77
|
-
</x-field>
|
|
78
|
-
<x-field data-name="onError" data-type="(error: any) => void" data-required="false">
|
|
79
|
-
<x-field-desc markdown>如果在过程中发生错误(例如超时或网络问题)时执行的回调函数。</x-field-desc>
|
|
80
|
-
</x-field>
|
|
81
|
-
<x-field data-name="messages" data-type="ConnectMessages" data-required="false">
|
|
82
|
-
<x-field-desc markdown>一个用于自定义模态框中显示文本的对象。有关详细信息,请参阅 `ConnectMessages` 类型。</x-field-desc>
|
|
83
|
-
<x-field data-name="title" data-type="string" data-desc="模态框标题。"></x-field>
|
|
84
|
-
<x-field data-name="scan" data-type="string" data-desc="二维码附带的文本。"></x-field>
|
|
85
|
-
<x-field data-name="confirm" data-type="string" data-desc="确认步骤的文本。"></x-field>
|
|
86
|
-
<x-field data-name="success" data-type="ReactNode" data-desc="成功屏幕的内容。"></x-field>
|
|
87
|
-
</x-field>
|
|
88
|
-
<x-field data-name="popup" data-type="boolean" data-default="true">
|
|
89
|
-
<x-field-desc markdown>如果为 `true`,UI 将作为模态对话框显示。如果为 `false`,它将内联渲染,需要设置 `containerEl`。</x-field-desc>
|
|
90
|
-
</x-field>
|
|
91
|
-
<x-field data-name="containerEl" data-type="Element" data-required="false">
|
|
92
|
-
<x-field-desc markdown>当 `popup` 设置为 `false` 时,`DidConnect` 组件将在此 DOM 元素中渲染。</x-field-desc>
|
|
93
|
-
</x-field>
|
|
94
|
-
<x-field data-name="closeTimeout" data-type="number" data-default="2000">
|
|
95
|
-
<x-field-desc markdown>成功连接后,模态框自动关闭前的延迟时间(以毫秒为单位)。</x-field-desc>
|
|
96
|
-
</x-field>
|
|
97
|
-
<x-field data-name="checkInterval" data-type="number" data-default="2000">
|
|
98
|
-
<x-field-desc markdown>轮询服务器以检查会话状态的间隔时间(以毫秒为单位)。</x-field-desc>
|
|
99
|
-
</x-field>
|
|
100
|
-
<x-field data-name="checkTimeout" data-type="number" data-default="300000">
|
|
101
|
-
<x-field-desc markdown>连接尝试超时的总时间(以毫秒为单位)。</x-field-desc>
|
|
102
|
-
</x-field>
|
|
103
|
-
<x-field data-name="extraParams" data-type="object" data-default="{}">
|
|
104
|
-
<x-field-desc markdown>要包含在会话创建请求中的任何额外参数,这些参数可以在服务器端检索。</x-field-desc>
|
|
105
|
-
</x-field>
|
|
106
|
-
</x-field-group>
|
|
107
|
-
|
|
108
|
-
### `connectApi.close()`
|
|
109
|
-
|
|
110
|
-
手动关闭 `DidConnect` 模态框。模态框在成功或用户取消时会自动关闭,但如果需要因其他原因以编程方式关闭它,可以调用此函数。
|
|
111
|
-
|
|
112
|
-
```javascript icon=lucide:x-circle
|
|
113
|
-
// 示例:在成功回调中短暂延迟后关闭模态框
|
|
114
|
-
connectApi.open({
|
|
115
|
-
action: 'login',
|
|
116
|
-
onSuccess: () => {
|
|
117
|
-
showTemporarySuccessMessage();
|
|
118
|
-
setTimeout(() => {
|
|
119
|
-
connectApi.close();
|
|
120
|
-
}, 1500);
|
|
121
|
-
},
|
|
122
|
-
closeTimeout: 999999 // 防止自动关闭
|
|
123
|
-
});
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
### `connectApi.openPopup(params, options)`
|
|
127
|
-
|
|
128
|
-
此函数提供了一种替代的连接方法,它会在新的浏览器弹出窗口中打开 DID Connect 流程,而不是在当前页面内打开模态框。这对于某些类似 OAuth 的流程或在无法注入模态框的网站上进行集成时非常有用。
|
|
129
|
-
|
|
130
|
-
**参数**
|
|
131
|
-
|
|
132
|
-
<x-field-group>
|
|
133
|
-
<x-field data-name="params" data-type="ConnectProps" data-required="true">
|
|
134
|
-
<x-field-desc markdown>与 `open` 方法的选项类似。一个关键区别是,`params.extraParams.provider` 是**必需的**,用于标识认证方法(例如 'github'、'google')。</x-field-desc>
|
|
135
|
-
</x-field>
|
|
136
|
-
<x-field data-name="options" data-type="object" data-required="false">
|
|
137
|
-
<x-field-desc markdown>弹出窗口本身的配置。</x-field-desc>
|
|
138
|
-
<x-field data-name="baseUrl" data-type="string" data-desc="用于构建弹出窗口 URL 的基础 URL。"></x-field>
|
|
139
|
-
<x-field data-name="locale" data-type="string" data-default="en" data-desc="弹出窗口内容的区域设置。"></x-field>
|
|
140
|
-
<x-field data-name="popupOptions" data-type="object" data-desc="直接传递给 `window.open()` 的选项,用于自定义弹出窗口的大小和功能。"></x-field>
|
|
141
|
-
</x-field>
|
|
142
|
-
</x-field-group>
|
|
143
|
-
|
|
144
|
-
**用法**
|
|
145
|
-
|
|
146
|
-
`openPopup` 函数返回一个 `Promise`,它在成功时解析为认证数据,在失败或取消时拒绝。
|
|
147
|
-
|
|
148
|
-
```javascript icon=lucide:external-link
|
|
149
|
-
const handleGithubLogin = async () => {
|
|
150
|
-
try {
|
|
151
|
-
const result = await connectApi.openPopup({
|
|
152
|
-
action: 'login',
|
|
153
|
-
onSuccess: () => console.log('此回调也会被触发'),
|
|
154
|
-
extraParams: { provider: 'github' } // 这是必需的
|
|
155
|
-
});
|
|
156
|
-
console.log('通过弹出窗口登录成功:', result);
|
|
157
|
-
} catch (err) {
|
|
158
|
-
if (err.message === 'Popup closed') {
|
|
159
|
-
console.log('用户关闭了弹出窗口。');
|
|
160
|
-
} else {
|
|
161
|
-
console.error('发生错误:', err);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### `connectApi.loginOAuth(options)`
|
|
168
|
-
|
|
169
|
-
这是一个辅助函数,用于直接启动 OAuth 登录流程。它是一个较低级别的实用工具,在库的其他部分内部使用。
|
|
170
|
-
|
|
171
|
-
**参数 (`options`)**
|
|
172
|
-
|
|
173
|
-
<x-field-group>
|
|
174
|
-
<x-field data-name="provider" data-type="string" data-required="true" data-desc="要使用的 OAuth 提供商,例如 'github'、'google'。"></x-field>
|
|
175
|
-
<x-field data-name="action" data-type="string" data-required="true" data-desc="操作,通常是 'login'。"></x-field>
|
|
176
|
-
<x-field data-name="extraParams" data-type="object" data-required="false" data-desc="OAuth 流程的附加参数。"></x-field>
|
|
177
|
-
<x-field data-name="onLogin" data-type="function" data-required="true" data-desc="成功登录后执行的回调函数。"></x-field>
|
|
178
|
-
</x-field-group>
|
package/docs/hooks-use-did.ja.md
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# useDid
|
|
2
|
-
|
|
3
|
-
`useDid`フックは、`session.user`オブジェクトから特定のDID関連情報を簡単に抽出して操作するための便利なユーティリティです。手動での処理なしに、永続DID、ウォレット情報、接続済みアカウントなどの一般的に必要なデータを取得するためにユーザーオブジェクトの解析を簡素化します。
|
|
4
|
-
|
|
5
|
-
このフックは、セッションコンテキストにアクセスできるように、`SessionProvider`の子であるコンポーネント内で使用する必要があります。
|
|
6
|
-
|
|
7
|
-
## 使用方法
|
|
8
|
-
|
|
9
|
-
このフックを使用するには、`useSession`と一緒にインポートします。`useSession`を呼び出して現在のセッション状態を取得し、その`session`オブジェクトを`useDid`に渡します。
|
|
10
|
-
|
|
11
|
-
```javascript Basic Usage icon=logos:react
|
|
12
|
-
import { useSession } from '@arcblock/did-connect-react';
|
|
13
|
-
import { useDid } from '@arcblock/did-connect-react/lib/User';
|
|
14
|
-
|
|
15
|
-
function UserProfile() {
|
|
16
|
-
const { session } = useSession();
|
|
17
|
-
const {
|
|
18
|
-
did,
|
|
19
|
-
walletDid,
|
|
20
|
-
connectedDids,
|
|
21
|
-
sourceProvider,
|
|
22
|
-
connectedAccounts,
|
|
23
|
-
} = useDid({ session });
|
|
24
|
-
|
|
25
|
-
if (!session.user) {
|
|
26
|
-
return <p>DID情報を表示するにはログインしてください。</p>;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
<div>
|
|
31
|
-
<h2>ユーザーDID情報</h2>
|
|
32
|
-
<p><strong>永続DID:</strong> {did}</p>
|
|
33
|
-
<p><strong>ウォレットDID:</strong> {walletDid || 'N/A'}</p>
|
|
34
|
-
<p><strong>ログイン方法:</strong> {sourceProvider}</p>
|
|
35
|
-
<h3>接続済みアカウント ({connectedAccounts.length})</h3>
|
|
36
|
-
<ul>
|
|
37
|
-
{connectedAccounts.map((account) => (
|
|
38
|
-
<li key={account.did}>
|
|
39
|
-
{account.provider}: {account.did}
|
|
40
|
-
</li>
|
|
41
|
-
))}
|
|
42
|
-
</ul>
|
|
43
|
-
</div>
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## パラメータ
|
|
49
|
-
|
|
50
|
-
`useDid`フックは、単一のオブジェクトをパラメータとして受け取ります。
|
|
51
|
-
|
|
52
|
-
<x-field data-name="options" data-type="object" data-required="true">
|
|
53
|
-
<x-field data-name="session" data-type="object" data-required="true" data-desc="`useSession`フックから取得したセッションオブジェクト。このフックは`session.user`が存在する場合にのみデータを計算します。">
|
|
54
|
-
<x-field data-name="user" data-type="object" data-required="false" data-desc="ログイン成功後にセッションコンテキストによって提供されるユーザーオブジェクト。"></x-field>
|
|
55
|
-
</x-field>
|
|
56
|
-
</x-field>
|
|
57
|
-
|
|
58
|
-
## 戻り値
|
|
59
|
-
|
|
60
|
-
このフックは、派生したさまざまなDID情報を含む状態オブジェクトを返します。このオブジェクトは、`session.user`オブジェクトが変更されるたびに更新されます。
|
|
61
|
-
|
|
62
|
-
<x-field-group>
|
|
63
|
-
<x-field data-name="did" data-type="string" data-desc="ユーザーの永続DID。これは`permanentDid`のエイリアスです。"></x-field>
|
|
64
|
-
<x-field data-name="wallet" data-type="object" data-desc="プロバイダーが'wallet'である接続済みアカウントオブジェクト。ウォレットが接続されていない場合は`undefined`を返します。">
|
|
65
|
-
<x-field data-name="did" data-type="string" data-desc="ウォレットアカウントのDID。"></x-field>
|
|
66
|
-
<x-field data-name="provider" data-type="string" data-desc="プロバイダー名。'wallet'になります。"></x-field>
|
|
67
|
-
</x-field>
|
|
68
|
-
<x-field data-name="walletDid" data-type="string" data-desc="ユーザーの接続済みウォレットのDID。ウォレットが接続されていない場合は`undefined`を返します。"></x-field>
|
|
69
|
-
<x-field data-name="permanentDid" data-type="string" data-desc="ユーザーの永続DIDで、`user.did`からのプライマリ識別子です。"></x-field>
|
|
70
|
-
<x-field data-name="connectedDids" data-type="string[]" data-desc="ユーザーの接続済みアカウントのすべてのDIDを含む配列。"></x-field>
|
|
71
|
-
<x-field data-name="connectedAccounts" data-type="object[]" data-desc="接続済みアカウントオブジェクトの完全な配列。">
|
|
72
|
-
<x-field data-name="did" data-type="string" data-desc="接続済みアカウントのDID。"></x-field>
|
|
73
|
-
<x-field data-name="provider" data-type="string" data-desc="アカウントのプロバイダー(例:'wallet'、'github')。"></x-field>
|
|
74
|
-
</x-field>
|
|
75
|
-
<x-field data-name="sourceProvider" data-type="string" data-desc="ユーザーが最初にログインに使用したプロバイダー(例:'wallet'、'github')。デフォルトは'wallet'です。"></x-field>
|
|
76
|
-
<x-field data-name="sourceProviders" data-type="string[]" data-desc="ユーザーの接続済みアカウントのすべてのプロバイダー名の配列。"></x-field>
|
|
77
|
-
</x-field-group>
|
|
78
|
-
|
|
79
|
-
## スタンドアロンのヘルパー関数
|
|
80
|
-
|
|
81
|
-
`useDid`フックは、エクスポートされた一連のヘルパー関数に基づいて構築されています。フックのリアクティブな状態管理が不要で、単にユーザーオブジェクトから特定の情報を抽出したい場合は、これらの関数を直接インポートして使用できます。
|
|
82
|
-
|
|
83
|
-
| Function | Description |
|
|
84
|
-
| ------------------------ | ------------------------------------------------------------ |
|
|
85
|
-
| `getPermanentDid(user)` | ユーザーオブジェクトから永続DIDを抽出します。 |
|
|
86
|
-
| `getWalletDid(user)` | 接続済みウォレットのDIDを抽出します。 |
|
|
87
|
-
| `getConnectedAccounts(user)` | 接続済みアカウントの配列を取得します。 |
|
|
88
|
-
| `getConnectedDids(user)` | すべての接続済みアカウントからDIDの配列を取得します。 |
|
|
89
|
-
| `getSourceProvider(user)` | 初回ログインに使用されたプロバイダーを取得します。 |
|
|
90
|
-
| `getSourceProviders(user)` | 接続されているすべてのプロバイダー名の配列を取得します。 |
|
|
91
|
-
| `getWallet(user)` | 完全なウォレットアカウントオブジェクトを検索して返します。 |
|
|
92
|
-
|
|
93
|
-
### 例:ヘルパー関数の使用
|
|
94
|
-
|
|
95
|
-
```javascript Direct Function Usage icon=logos:javascript
|
|
96
|
-
import { getWalletDid } from '@arcblock/did-connect-react/lib/User/use-did';
|
|
97
|
-
import { useSession } from '@arcblock/did-connect-react';
|
|
98
|
-
|
|
99
|
-
// このアプローチは、イベントハンドラーやその他の非React関数内で役立ちます
|
|
100
|
-
function handleUserAction() {
|
|
101
|
-
const { session } = useSession();
|
|
102
|
-
if (session.user) {
|
|
103
|
-
const walletDid = getWalletDid(session.user);
|
|
104
|
-
console.log('ユーザーのウォレットDID:', walletDid);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
```
|
package/docs/hooks-use-did.md
DELETED
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# useDid
|
|
2
|
-
|
|
3
|
-
The `useDid` hook is a convenient utility for easily extracting and working with specific DID-related information from the `session.user` object. It simplifies parsing the user object to get commonly needed data like the permanent DID, wallet information, and connected accounts without manual processing.
|
|
4
|
-
|
|
5
|
-
This hook should be used within a component that is a child of the `SessionProvider` to ensure it has access to the session context.
|
|
6
|
-
|
|
7
|
-
## How to Use
|
|
8
|
-
|
|
9
|
-
To use the hook, import it along with `useSession`. Call `useSession` to get the current session state, and then pass the `session` object to `useDid`.
|
|
10
|
-
|
|
11
|
-
```javascript Basic Usage icon=logos:react
|
|
12
|
-
import { useSession } from '@arcblock/did-connect-react';
|
|
13
|
-
import { useDid } from '@arcblock/did-connect-react/lib/User';
|
|
14
|
-
|
|
15
|
-
function UserProfile() {
|
|
16
|
-
const { session } = useSession();
|
|
17
|
-
const {
|
|
18
|
-
did,
|
|
19
|
-
walletDid,
|
|
20
|
-
connectedDids,
|
|
21
|
-
sourceProvider,
|
|
22
|
-
connectedAccounts,
|
|
23
|
-
} = useDid({ session });
|
|
24
|
-
|
|
25
|
-
if (!session.user) {
|
|
26
|
-
return <p>Please log in to view your DID information.</p>;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return (
|
|
30
|
-
<div>
|
|
31
|
-
<h2>User DID Information</h2>
|
|
32
|
-
<p><strong>Permanent DID:</strong> {did}</p>
|
|
33
|
-
<p><strong>Wallet DID:</strong> {walletDid || 'N/A'}</p>
|
|
34
|
-
<p><strong>Login Method:</strong> {sourceProvider}</p>
|
|
35
|
-
<h3>Connected Accounts ({connectedAccounts.length})</h3>
|
|
36
|
-
<ul>
|
|
37
|
-
{connectedAccounts.map((account) => (
|
|
38
|
-
<li key={account.did}>
|
|
39
|
-
{account.provider}: {account.did}
|
|
40
|
-
</li>
|
|
41
|
-
))}
|
|
42
|
-
</ul>
|
|
43
|
-
</div>
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Parameters
|
|
49
|
-
|
|
50
|
-
The `useDid` hook accepts a single object as its parameter.
|
|
51
|
-
|
|
52
|
-
<x-field data-name="options" data-type="object" data-required="true">
|
|
53
|
-
<x-field data-name="session" data-type="object" data-required="true" data-desc="The session object obtained from the `useSession` hook. The hook will only compute data when `session.user` is present.">
|
|
54
|
-
<x-field data-name="user" data-type="object" data-required="false" data-desc="The user object provided by the session context after a successful login."></x-field>
|
|
55
|
-
</x-field>
|
|
56
|
-
</x-field>
|
|
57
|
-
|
|
58
|
-
## Return Value
|
|
59
|
-
|
|
60
|
-
The hook returns a state object containing various pieces of derived DID information. This object will be updated whenever the `session.user` object changes.
|
|
61
|
-
|
|
62
|
-
<x-field-group>
|
|
63
|
-
<x-field data-name="did" data-type="string" data-desc="The user's permanent DID. This is an alias for `permanentDid`."></x-field>
|
|
64
|
-
<x-field data-name="wallet" data-type="object" data-desc="The connected account object where the provider is 'wallet'. Returns `undefined` if no wallet is connected.">
|
|
65
|
-
<x-field data-name="did" data-type="string" data-desc="The DID of the wallet account."></x-field>
|
|
66
|
-
<x-field data-name="provider" data-type="string" data-desc="The provider name, which will be 'wallet'."></x-field>
|
|
67
|
-
</x-field>
|
|
68
|
-
<x-field data-name="walletDid" data-type="string" data-desc="The DID of the user's connected wallet. Returns `undefined` if no wallet is connected."></x-field>
|
|
69
|
-
<x-field data-name="permanentDid" data-type="string" data-desc="The user's permanent DID, which is the primary identifier from `user.did`."></x-field>
|
|
70
|
-
<x-field data-name="connectedDids" data-type="string[]" data-desc="An array of all DIDs from the user's connected accounts."></x-field>
|
|
71
|
-
<x-field data-name="connectedAccounts" data-type="object[]" data-desc="The full array of connected account objects.">
|
|
72
|
-
<x-field data-name="did" data-type="string" data-desc="The DID of the connected account."></x-field>
|
|
73
|
-
<x-field data-name="provider" data-type="string" data-desc="The provider of the account (e.g., 'wallet', 'github')."></x-field>
|
|
74
|
-
</x-field>
|
|
75
|
-
<x-field data-name="sourceProvider" data-type="string" data-desc="The provider the user originally used to log in (e.g., 'wallet', 'github'). Defaults to 'wallet'."></x-field>
|
|
76
|
-
<x-field data-name="sourceProviders" data-type="string[]" data-desc="An array of all provider names from the user's connected accounts."></x-field>
|
|
77
|
-
</x-field-group>
|
|
78
|
-
|
|
79
|
-
## Standalone Helper Functions
|
|
80
|
-
|
|
81
|
-
The `useDid` hook is built on a set of exported helper functions. If you don't need the reactive state management of a hook and just want to extract a specific piece of information from a user object, you can import and use these functions directly.
|
|
82
|
-
|
|
83
|
-
| Function | Description |
|
|
84
|
-
| ------------------------ | ------------------------------------------------------------ |
|
|
85
|
-
| `getPermanentDid(user)` | Extracts the permanent DID from the user object. |
|
|
86
|
-
| `getWalletDid(user)` | Extracts the DID of the connected wallet. |
|
|
87
|
-
| `getConnectedAccounts(user)` | Retrieves the array of connected accounts. |
|
|
88
|
-
| `getConnectedDids(user)` | Retrieves an array of DIDs from all connected accounts. |
|
|
89
|
-
| `getSourceProvider(user)` | Gets the provider used for the initial login. |
|
|
90
|
-
| `getSourceProviders(user)` | Gets an array of all connected provider names. |
|
|
91
|
-
| `getWallet(user)` | Finds and returns the complete wallet account object. |
|
|
92
|
-
|
|
93
|
-
### Example: Using a Helper Function
|
|
94
|
-
|
|
95
|
-
```javascript Direct Function Usage icon=logos:javascript
|
|
96
|
-
import { getWalletDid } from '@arcblock/did-connect-react/lib/User/use-did';
|
|
97
|
-
import { useSession } from '@arcblock/did-connect-react';
|
|
98
|
-
|
|
99
|
-
// This approach can be useful inside event handlers or other non-React functions
|
|
100
|
-
function handleUserAction() {
|
|
101
|
-
const { session } = useSession();
|
|
102
|
-
if (session.user) {
|
|
103
|
-
const walletDid = getWalletDid(session.user);
|
|
104
|
-
console.log('User Wallet DID:', walletDid);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
```
|