@blocklet/ui-react 3.1.48 → 3.1.49

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.
Files changed (98) hide show
  1. package/.aigne/doc-smith/config.yaml +76 -0
  2. package/.aigne/doc-smith/history.yaml +9 -0
  3. package/.aigne/doc-smith/output/structure-plan.json +249 -0
  4. package/.aigne/doc-smith/upload-cache.yaml +528 -0
  5. package/docs/_sidebar.md +19 -0
  6. package/docs/components-component-management-blocklet-studio.ja.md +194 -0
  7. package/docs/components-component-management-blocklet-studio.md +194 -0
  8. package/docs/components-component-management-blocklet-studio.zh-TW.md +194 -0
  9. package/docs/components-component-management-blocklet-studio.zh.md +194 -0
  10. package/docs/components-component-management-component-installer.ja.md +256 -0
  11. package/docs/components-component-management-component-installer.md +256 -0
  12. package/docs/components-component-management-component-installer.zh-TW.md +256 -0
  13. package/docs/components-component-management-component-installer.zh.md +256 -0
  14. package/docs/components-component-management.ja.md +59 -0
  15. package/docs/components-component-management.md +59 -0
  16. package/docs/components-component-management.zh-TW.md +59 -0
  17. package/docs/components-component-management.zh.md +59 -0
  18. package/docs/components-layout-dashboard.ja.md +231 -0
  19. package/docs/components-layout-dashboard.md +231 -0
  20. package/docs/components-layout-dashboard.zh-TW.md +231 -0
  21. package/docs/components-layout-dashboard.zh.md +231 -0
  22. package/docs/components-layout-footer.ja.md +165 -0
  23. package/docs/components-layout-footer.md +165 -0
  24. package/docs/components-layout-footer.zh-TW.md +165 -0
  25. package/docs/components-layout-footer.zh.md +165 -0
  26. package/docs/components-layout-header.ja.md +233 -0
  27. package/docs/components-layout-header.md +233 -0
  28. package/docs/components-layout-header.zh-TW.md +233 -0
  29. package/docs/components-layout-header.zh.md +233 -0
  30. package/docs/components-layout.ja.md +50 -0
  31. package/docs/components-layout.md +50 -0
  32. package/docs/components-layout.zh-TW.md +50 -0
  33. package/docs/components-layout.zh.md +50 -0
  34. package/docs/components-notifications.ja.md +173 -0
  35. package/docs/components-notifications.md +173 -0
  36. package/docs/components-notifications.zh-TW.md +174 -0
  37. package/docs/components-notifications.zh.md +173 -0
  38. package/docs/components-user-management-user-center.ja.md +183 -0
  39. package/docs/components-user-management-user-center.md +183 -0
  40. package/docs/components-user-management-user-center.zh-TW.md +183 -0
  41. package/docs/components-user-management-user-center.zh.md +183 -0
  42. package/docs/components-user-management-user-sessions.ja.md +164 -0
  43. package/docs/components-user-management-user-sessions.md +164 -0
  44. package/docs/components-user-management-user-sessions.zh-TW.md +164 -0
  45. package/docs/components-user-management-user-sessions.zh.md +164 -0
  46. package/docs/components-user-management.ja.md +76 -0
  47. package/docs/components-user-management.md +76 -0
  48. package/docs/components-user-management.zh-TW.md +76 -0
  49. package/docs/components-user-management.zh.md +76 -0
  50. package/docs/components-utilities-icon.ja.md +106 -0
  51. package/docs/components-utilities-icon.md +106 -0
  52. package/docs/components-utilities-icon.zh-TW.md +106 -0
  53. package/docs/components-utilities-icon.zh.md +106 -0
  54. package/docs/components-utilities.ja.md +136 -0
  55. package/docs/components-utilities.md +136 -0
  56. package/docs/components-utilities.zh-TW.md +136 -0
  57. package/docs/components-utilities.zh.md +136 -0
  58. package/docs/components.ja.md +27 -0
  59. package/docs/components.md +27 -0
  60. package/docs/components.zh-TW.md +27 -0
  61. package/docs/components.zh.md +27 -0
  62. package/docs/core-concepts.ja.md +164 -0
  63. package/docs/core-concepts.md +164 -0
  64. package/docs/core-concepts.zh-TW.md +164 -0
  65. package/docs/core-concepts.zh.md +164 -0
  66. package/docs/getting-started.ja.md +132 -0
  67. package/docs/getting-started.md +132 -0
  68. package/docs/getting-started.zh-TW.md +132 -0
  69. package/docs/getting-started.zh.md +132 -0
  70. package/docs/hooks-api.ja.md +214 -0
  71. package/docs/hooks-api.md +214 -0
  72. package/docs/hooks-api.zh-TW.md +214 -0
  73. package/docs/hooks-api.zh.md +214 -0
  74. package/docs/how-to-guides.ja.md +413 -0
  75. package/docs/how-to-guides.md +413 -0
  76. package/docs/how-to-guides.zh-TW.md +413 -0
  77. package/docs/how-to-guides.zh.md +413 -0
  78. package/docs/overview.ja.md +91 -0
  79. package/docs/overview.md +91 -0
  80. package/docs/overview.zh-TW.md +91 -0
  81. package/docs/overview.zh.md +91 -0
  82. package/glossary.md +12 -0
  83. package/lib/Dashboard/index.js +46 -42
  84. package/lib/Footer/index.js +51 -36
  85. package/lib/Header/index.js +48 -44
  86. package/lib/UserCenter/components/settings.js +1 -0
  87. package/lib/UserCenter/components/user-center.js +133 -133
  88. package/lib/blocklets.d.ts +13 -2
  89. package/lib/blocklets.js +40 -40
  90. package/lib/common/header-addons.js +37 -33
  91. package/package.json +7 -7
  92. package/src/Dashboard/index.jsx +8 -3
  93. package/src/Footer/index.jsx +22 -4
  94. package/src/Header/index.tsx +7 -2
  95. package/src/UserCenter/components/settings.tsx +1 -0
  96. package/src/UserCenter/components/user-center.tsx +6 -6
  97. package/src/blocklets.js +18 -9
  98. package/src/common/header-addons.jsx +7 -2
@@ -0,0 +1,183 @@
1
+ # UserCenter
2
+
3
+ `UserCenter` 元件是一個全面的預建介面,提供完整的用戶個人檔案和設定管理頁面。它整合了多種功能,包括使用者資訊顯示、通行證管理、隱私控制、通知設定和 DID 儲存管理,為使用者提供了一個集中式的中心。
4
+
5
+ 此元件設計為高度可擴展,允許開發者透過 blocklet 的元資料新增自訂分頁和內容,確保在不同應用程式中提供一致的使用者體驗。
6
+
7
+ ```d2
8
+ direction: down
9
+
10
+ UserCenter: {
11
+ label: "UserCenter 元件佈局"
12
+ shape: rectangle
13
+
14
+ Header: { shape: rectangle }
15
+
16
+ Main: {
17
+ direction: right
18
+ shape: rectangle
19
+
20
+ Sidebar: {
21
+ label: "UserBasicInfo\n(個人檔案側邊欄)"
22
+ shape: rectangle
23
+ }
24
+
25
+ Content: {
26
+ label: "內容區域"
27
+ shape: rectangle
28
+
29
+ Tabs: {
30
+ label: "分頁導覽"
31
+ shape: rectangle
32
+ }
33
+ TabPanel: {
34
+ label: "當前分頁內容"
35
+ shape: rectangle
36
+ }
37
+ }
38
+ }
39
+
40
+ Footer: { shape: rectangle }
41
+ }
42
+
43
+ UserCenter.Main.Content.Tabs -> UserCenter.Main.Content.TabPanel: "控制內容"
44
+ ```
45
+
46
+ ## 基本用法
47
+
48
+ 要使用 `UserCenter`,您需要提供 `currentTab` prop,它決定了哪個區塊是作用中的。這通常來自應用程式的路由器。
49
+
50
+ ```javascript UserCenter 範例 icon=logos:react
51
+ import React from 'react';
52
+ import { UserCenter } from '@blocklet/ui-react';
53
+
54
+ export default function ProfilePage() {
55
+ // 在實際應用程式中,您會從路由器獲取此值。
56
+ // 例如,如果 URL 是 /profile/settings,則 currentTab 將是 '/profile/settings'。
57
+ const currentTab = '/profile/nfts';
58
+
59
+ return <UserCenter currentTab={currentTab} />;
60
+ }
61
+ ```
62
+
63
+ ## Props
64
+
65
+ `UserCenter` 元件接受多個 props 來客製化其行為和外觀。
66
+
67
+ <x-field-group>
68
+ <x-field data-name="children" data-type="React.ReactNode" data-required="false">
69
+ <x-field-desc markdown>用於呈現 blocklet 導覽設定中定義的自訂分頁內容。當 `currentTab` 符合自訂分頁的 URL 時,`UserCenter` 將顯示 children。</x-field-desc>
70
+ </x-field>
71
+ <x-field data-name="currentTab" data-type="string" data-required="true">
72
+ <x-field-desc markdown>當前作用中分頁的值。此值應與可用分頁(預設或自訂)之一的 `value` 屬性相符。它用於突顯正確的分頁並顯示其對應的內容。</x-field-desc>
73
+ </x-field>
74
+ <x-field data-name="userDid" data-type="string" data-required="false">
75
+ <x-field-desc markdown>要顯示個人檔案的使用者的 DID。如果省略,元件將嘗試從 URL 查詢參數(`?did=...`)中獲取 DID,或預設為當前登入的使用者。</x-field-desc>
76
+ </x-field>
77
+ <x-field data-name="embed" data-type="boolean" data-default="false" data-required="false">
78
+ <x-field-desc markdown>若設定為 `true`,元件將以嵌入模式呈現,不包含主要的 `Header` 和 `Footer`,使其適合整合到其他佈局或頁面中。</x-field-desc>
79
+ </x-field>
80
+ <x-field data-name="onlyProfile" data-type="boolean" data-default="false" data-required="false">
81
+ <x-field-desc markdown>若設定為 `true`,則僅顯示 `UserBasicInfo` 個人檔案卡片,不含任何分頁或內容區塊。這在只需要緊湊型使用者個人檔案的情境中很有用。</x-field-desc>
82
+ </x-field>
83
+ <x-field data-name="hideFooter" data-type="boolean" data-default="false" data-required="false">
84
+ <x-field-desc markdown>若設定為 `true`,將不會呈現 `Footer` 元件。</x-field-desc>
85
+ </x-field>
86
+ <x-field data-name="headerProps" data-type="object" data-required="false">
87
+ <x-field-desc markdown>要傳遞給底層 `Header` 元件以進行自訂的 props。</x-field-desc>
88
+ </x-field>
89
+ <x-field data-name="footerProps" data-type="object" data-required="false">
90
+ <x-field-desc markdown>要傳遞給底層 `Footer` 元件以進行自訂的 props。</x-field-desc>
91
+ </x-field>
92
+ <x-field data-name="onDestroySelf" data-type="() => void" data-required="false">
93
+ <x-field-desc markdown>當非擁有者使用者從設定中的「危險區域」啟動帳號刪除程序時觸發的回呼函式。</x-field-desc>
94
+ </x-field>
95
+ <x-field data-name="notLoginContent" data-type="React.ReactNode" data-required="false">
96
+ <x-field-desc markdown>當沒有使用者登入且未提供 `userDid` 時顯示的自訂內容。如果未設定,則顯示預設的登入提示。</x-field-desc>
97
+ </x-field>
98
+ </x-field-group>
99
+
100
+ ## 核心功能
101
+
102
+ `UserCenter` 由幾個關鍵區塊和元件組成,提供開箱即用的豐富使用者體驗。
103
+
104
+ ### 預設分頁
105
+
106
+ 預設情況下,`UserCenter` 為每位使用者包含以下分頁:
107
+
108
+ | 分頁 | 說明 | 可見性 |
109
+ | ------------------- | ------------------------------------------------------------------------------ | --------------- |
110
+ | **NFTs** | 顯示使用者的 NFT 收藏。 | 公開 |
111
+ | **社交動態** | 如果啟用社交功能,則顯示使用者的追蹤者和追蹤中清單。 | 公開 |
112
+ | **設定** | 存取個人檔案、隱私、通知和會話管理。 | 僅限擁有者 |
113
+ | **儲存空間** | 用於管理與 DID Spaces 連接以進行去中心化儲存的介面。 | 僅限擁有者 |
114
+
115
+ ### 使用者個人檔案 (`UserBasicInfo`)
116
+
117
+ `UserBasicInfo` 元件是一個專用區塊(在桌面上通常是側邊欄),顯示必要的使用者詳細資訊:
118
+ - **頭像和姓名**:顯示使用者的個人資料圖片和全名。擁有者可以點擊頭像來打開個人檔案切換器。
119
+ - **DID**:顯示使用者的去中心化識別碼,並提供複製或查看其 QR 碼的選項。
120
+ - **社交操作**:對於公開的個人檔案,它會顯示「追蹤」或「取消追蹤」按鈕。
121
+ - **元資料**:顯示使用者提供的資訊,如個人簡介、地點和社交連結。
122
+ - **私人資訊**:對於擁有者,它會顯示私人詳細資訊,如電子郵件和電話號碼。
123
+
124
+ ### 通行證管理
125
+
126
+ 在主要的個人檔案分頁(NFTs)上,當前登入的使用者會看到一個專門用於其 DID 通行證的區塊。此區域列出所有相關聯的通行證,顯示其狀態(例如,有效、已撤銷),並突顯當前正在使用的通行證。
127
+
128
+ ### 設定
129
+
130
+ 「設定」分頁是一個全面的面板,僅對擁有該個人檔案的使用者可用。它分為幾個子區塊:
131
+
132
+ - **通用設定**:允許使用者更新其公開的個人檔案資訊,如姓名、個人簡介和社交連結。
133
+ - **通知管理**:設定如何接收通知(錢包、電子郵件、推播)及管理 Webhook。
134
+ - **第三方登入**:管理與其他身份提供者的連接,如 Google、GitHub 或 Passkeys。
135
+ - **隱私管理**:控制使用者個人檔案上不同分頁的可見性,使其公開或私密。
136
+ - **會話管理**:查看並撤銷不同裝置上的有效登入會話。
137
+ - **危險區域**:對於非擁有者角色,提供刪除自己帳號的選項。
138
+
139
+ ## 自訂
140
+
141
+ 您可以透過 blocklet 的設定來新增分頁,以擴展 `UserCenter`。
142
+
143
+ 1. **在 `blocklet.yml` 中定義自訂分頁**
144
+
145
+ 在您的 `blocklet.yml` 檔案中,將條目新增至 `navigation.userCenter` 陣列。每個條目代表一個新的分頁。
146
+
147
+ ```yaml blocklet.yml icon=mdi:code-block-tags
148
+ navigation:
149
+ - title: User Center
150
+ role: guest
151
+ userCenter:
152
+ - title: My Activity
153
+ link: /profile/activity
154
+ icon: 'material-symbols:history'
155
+ # 如果此分頁應僅對個人檔案擁有者可見,則設定為 true
156
+ private: false
157
+ ```
158
+
159
+ 2. **為自訂分頁呈現內容**
160
+
161
+ 在您的元件中,傳遞一個子元素,當 `currentTab` prop 符合您定義的 `link` 時,該子元素將被呈現。
162
+
163
+ ```javascript MyActivity.js icon=logos:react
164
+ import React from 'react';
165
+ import { UserCenter } from '@blocklet/ui-react';
166
+
167
+ function MyActivityComponent() {
168
+ return <div>這是自訂的活動內容。</div>;
169
+ }
170
+
171
+ export default function ProfilePageWithActivity() {
172
+ // 此值將來自您的路由器,例如 '/profile/activity'
173
+ const currentTab = '/profile/activity';
174
+
175
+ return (
176
+ <UserCenter currentTab={currentTab}>
177
+ {currentTab === '/profile/activity' && <MyActivityComponent />}
178
+ </UserCenter>
179
+ );
180
+ }
181
+ ```
182
+
183
+ 這種方法讓您能夠將特定於應用程式的頁面無縫整合到標準的 `UserCenter` 佈局中。
@@ -0,0 +1,183 @@
1
+ # UserCenter
2
+
3
+ `UserCenter` 组件是一个全面的、预构建的界面,提供完整的用户个人资料和设置管理页面。它集成了多种功能,包括用户信息显示、通行证管理、隐私控制、通知设置和 DID 存储管理,为用户提供了一个集中的枢纽。
4
+
5
+ 该组件被设计为高度可扩展,允许开发者通过 blocklet 的元数据添加自定义标签页和内容,从而确保在不同应用中提供一致的用户体验。
6
+
7
+ ```d2
8
+ direction: down
9
+
10
+ UserCenter: {
11
+ label: "UserCenter 组件布局"
12
+ shape: rectangle
13
+
14
+ Header: { shape: rectangle }
15
+
16
+ Main: {
17
+ direction: right
18
+ shape: rectangle
19
+
20
+ Sidebar: {
21
+ label: "UserBasicInfo\n(个人资料侧边栏)"
22
+ shape: rectangle
23
+ }
24
+
25
+ Content: {
26
+ label: "内容区域"
27
+ shape: rectangle
28
+
29
+ Tabs: {
30
+ label: "标签页导航"
31
+ shape: rectangle
32
+ }
33
+ TabPanel: {
34
+ label: "当前标签页内容"
35
+ shape: rectangle
36
+ }
37
+ }
38
+ }
39
+
40
+ Footer: { shape: rectangle }
41
+ }
42
+
43
+ UserCenter.Main.Content.Tabs -> UserCenter.Main.Content.TabPanel: "控制内容"
44
+ ```
45
+
46
+ ## 基本用法
47
+
48
+ 要使用 `UserCenter`,您需要提供 `currentTab` 属性,它决定了哪个部分是活动的。该值通常从应用的路由器中获取。
49
+
50
+ ```javascript UserCenter Example icon=logos:react
51
+ import React from 'react';
52
+ import { UserCenter } from '@blocklet/ui-react';
53
+
54
+ export default function ProfilePage() {
55
+ // 在实际应用中,您会从路由器中获取此值。
56
+ // 例如,如果 URL 是 /profile/settings,currentTab 的值将是 '/profile/settings'。
57
+ const currentTab = '/profile/nfts';
58
+
59
+ return <UserCenter currentTab={currentTab} />;
60
+ }
61
+ ```
62
+
63
+ ## 属性
64
+
65
+ `UserCenter` 组件接受多个属性来自定义其行为和外观。
66
+
67
+ <x-field-group>
68
+ <x-field data-name="children" data-type="React.ReactNode" data-required="false">
69
+ <x-field-desc markdown>用于为 blocklet 导航设置中定义的自定义标签页渲染内容。当 `currentTab` 与自定义标签页的 URL 匹配时,`UserCenter` 将显示子组件。</x-field-desc>
70
+ </x-field>
71
+ <x-field data-name="currentTab" data-type="string" data-required="true">
72
+ <x-field-desc markdown>当前活动标签页的值。该值应与可用标签页之一(默认或自定义)的 `value` 属性匹配。它用于高亮显示正确的标签页并展示其对应的内容。</x-field-desc>
73
+ </x-field>
74
+ <x-field data-name="userDid" data-type="string" data-required="false">
75
+ <x-field-desc markdown>要显示其个人资料的用户的 DID。如果省略,组件将尝试从 URL 查询参数(`?did=...`)中获取 DID,或默认使用当前登录的用户。</x-field-desc>
76
+ </x-field>
77
+ <x-field data-name="embed" data-type="boolean" data-default="false" data-required="false">
78
+ <x-field-desc markdown>如果设置为 `true`,组件将以嵌入模式渲染,不包含主要的 `Header` 和 `Footer`,使其适合集成到其他布局或页面中。</x-field-desc>
79
+ </x-field>
80
+ <x-field data-name="onlyProfile" data-type="boolean" data-default="false" data-required="false">
81
+ <x-field-desc markdown>如果设置为 `true`,则仅显示 `UserBasicInfo` 个人资料卡片,不包含任何标签页或内容部分。这在仅需要紧凑型用户个人资料的场景下非常有用。</x-field-desc>
82
+ </x-field>
83
+ <x-field data-name="hideFooter" data-type="boolean" data-default="false" data-required="false">
84
+ <x-field-desc markdown>如果设置为 `true`,`Footer` 组件将不会被渲染。</x-field-desc>
85
+ </x-field>
86
+ <x-field data-name="headerProps" data-type="object" data-required="false">
87
+ <x-field-desc markdown>传递给底层 `Header` 组件以进行自定义的属性。</x-field-desc>
88
+ </x-field>
89
+ <x-field data-name="footerProps" data-type="object" data-required="false">
90
+ <x-field-desc markdown>传递给底层 `Footer` 组件以进行自定义的属性。</x-field-desc>
91
+ </x-field>
92
+ <x-field data-name="onDestroySelf" data-type="() => void" data-required="false">
93
+ <x-field-desc markdown>当非所有者用户从设置中的“危险区域”发起账户删除流程时触发的回调函数。</x-field-desc>
94
+ </x-field>
95
+ <x-field data-name="notLoginContent" data-type="React.ReactNode" data-required="false">
96
+ <x-field-desc markdown>当没有用户登录且未提供 `userDid` 时显示的自定义内容。如果未设置,则显示默认的登录提示。</x-field-desc>
97
+ </x-field>
98
+ </x-field-group>
99
+
100
+ ## 核心功能
101
+
102
+ `UserCenter` 由几个关键部分和组件组成,提供开箱即用的丰富用户体验。
103
+
104
+ ### 默认标签页
105
+
106
+ 默认情况下,`UserCenter` 为每个用户包含以下标签页:
107
+
108
+ | 标签页 | 描述 | 可见性 |
109
+ | ------------------- | ------------------------------------------------------------------------------ | --------------- |
110
+ | **NFT** | 显示用户的 NFT 收藏。 | 公开 |
111
+ | **社交动态** | 如果启用了社交功能,则显示用户的关注者和正在关注列表。 | 公开 |
112
+ | **设置** | 访问个人资料、隐私、通知和会话管理。 | 仅所有者可见 |
113
+ | **存储** | 用于管理与 DID Spaces 的连接以进行去中心化存储的界面。 | 仅所有者可见 |
114
+
115
+ ### 用户个人资料 (`UserBasicInfo`)
116
+
117
+ `UserBasicInfo` 组件是一个专用部分(在桌面上通常是侧边栏),用于显示用户的基本详细信息:
118
+ - **头像和姓名**:显示用户的个人资料图片和全名。所有者可以点击头像打开个人资料切换器。
119
+ - **DID**:显示用户的去中心化标识符,并提供复制或查看其二维码的选项。
120
+ - **社交操作**:对于公开的个人资料,显示“关注”或“取消关注”按钮。
121
+ - **元数据**:显示用户提供的信息,如简介、位置和社交链接。
122
+ - **私密信息**:对于所有者,显示电子邮件和电话号码等私密详细信息。
123
+
124
+ ### 通行证管理
125
+
126
+ 在主个人资料标签页(NFT)上,当前登录的用户会看到一个专门用于其 DID 通行证的部分。该区域列出了所有关联的通行证,标明其状态(例如,活动、已吊销),并高亮显示当前正在使用的通行证。
127
+
128
+ ### 设置
129
+
130
+ “设置”标签页是一个综合面板,仅对拥有该个人资料的用户可见。它分为几个子部分:
131
+
132
+ - **通用设置**:允许用户更新其公开的个人资料信息,如姓名、简介和社交链接。
133
+ - **通知管理**:配置接收通知的方式(钱包、电子邮件、推送)并管理 Webhook。
134
+ - **第三方登录**:管理与其他身份提供商(如 Google、GitHub 或 Passkeys)的连接。
135
+ - **隐私管理**:控制用户个人资料上不同标签页的可见性,将其设置为公开或私密。
136
+ - **会话管理**:查看并撤销不同设备上的活动登录会话。
137
+ - **危险区域**:为非所有者角色提供删除自己账户的选项。
138
+
139
+ ## 自定义
140
+
141
+ 您可以通过 blocklet 的配置添加新的标签页来扩展 `UserCenter`。
142
+
143
+ 1. **在 `blocklet.yml` 中定义自定义标签页**
144
+
145
+ 在您的 `blocklet.yml` 文件中,向 `navigation.userCenter` 数组添加条目。每个条目代表一个新的标签页。
146
+
147
+ ```yaml blocklet.yml icon=mdi:code-block-tags
148
+ navigation:
149
+ - title: User Center
150
+ role: guest
151
+ userCenter:
152
+ - title: My Activity
153
+ link: /profile/activity
154
+ icon: 'material-symbols:history'
155
+ # 如果此标签页应仅对个人资料所有者可见,则设置为 true
156
+ private: false
157
+ ```
158
+
159
+ 2. **为自定义标签页渲染内容**
160
+
161
+ 在您的组件中,传递一个子元素,当 `currentTab` 属性与您定义的 `link` 匹配时,该子元素将被渲染。
162
+
163
+ ```javascript MyActivity.js icon=logos:react
164
+ import React from 'react';
165
+ import { UserCenter } from '@blocklet/ui-react';
166
+
167
+ function MyActivityComponent() {
168
+ return <div>This is the custom activity content.</div>;
169
+ }
170
+
171
+ export default function ProfilePageWithActivity() {
172
+ // 此值将来自您的路由器,例如 '/profile/activity'
173
+ const currentTab = '/profile/activity';
174
+
175
+ return (
176
+ <UserCenter currentTab={currentTab}>
177
+ {currentTab === '/profile/activity' && <MyActivityComponent />}
178
+ </UserCenter>
179
+ );
180
+ }
181
+ ```
182
+
183
+ 这种方法允许您将特定于应用的页面无缝集成到标准的 `UserCenter` 布局中。
@@ -0,0 +1,164 @@
1
+ # UserSessions
2
+
3
+ `UserSessions` コンポーネントは、ユーザーのログインセッションを表示および管理するための包括的なデータテーブルをレンダリングします。さまざまなデバイスにわたるすべてのアクティブ、期限切れ、オフラインのセッションの明確な概要を提供し、ユーザーがアカウントのセキュリティを管理できるようにします。
4
+
5
+ このコンポーネントは、セッション管理機能を実装する必要がある開発者向けのプラグアンドプレイソリューションとして設計されています。データの取得、ページネーション、UIのレンダリング、および特定のセッションからのログアウトなどのアクションを処理します。
6
+
7
+ ## 機能
8
+
9
+ - **セッションのフィルタリング:** ユーザーはセッションをステータス(`online`、`expired`、または `offline`)で簡単にフィルタリングできます。
10
+ - **詳細情報:** 各セッションエントリには、オペレーティングシステム、デバイスタイプ(ブラウザ)、ウォレットOSなど、解析されたユーザーエージェントデータが表示されます。
11
+ - **IPジオロケーション:** 最終ログインIPアドレスに基づいて地理的な地域を自動的に解決し、表示します。
12
+ - **セッションの終了:** ユーザーは現在のセッションを除く任意のセッションを終了させることができます。
13
+ - **一括操作:** 特定のステータスのすべてのセッションを終了させる「すべてログアウト」機能が含まれています。
14
+ - **レスポンシブデザイン:** さまざまな画面サイズに適応し、デスクトップとモバイルデバイスの両方で一貫したユーザーエクスペリエンスを保証します。
15
+
16
+ ## 仕組み
17
+
18
+ `UserSessions` コンポーネントは、開発者が提供する関数からセッションデータを要求することによって動作します。この設計により、コンポーネントは特定のバックエンド実装から切り離され、より大きな柔軟性が提供されます。
19
+
20
+ ```d2
21
+ direction: down
22
+
23
+ User-Interaction: {
24
+ shape: c4-person
25
+ label: "ユーザー"
26
+ }
27
+
28
+ UserSessions-Component: {
29
+ label: "UserSessions コンポーネント"
30
+ shape: rectangle
31
+
32
+ Datatable: {
33
+ label: "データテーブル"
34
+ }
35
+
36
+ Actions: {
37
+ label: "ログアウト / すべてログアウト"
38
+ }
39
+ }
40
+
41
+ Application-Backend: {
42
+ label: "アプリケーションバックエンド"
43
+ shape: rectangle
44
+
45
+ API-Endpoint: {
46
+ label: "API エンドポイント\n(例: /api/sessions)"
47
+ }
48
+
49
+ Database: {
50
+ shape: cylinder
51
+ label: "セッションストレージ"
52
+ }
53
+ }
54
+
55
+ User-Interaction -> UserSessions-Component.Datatable: "1. セッションを表示"
56
+ UserSessions-Component -> Application-Backend.API-Endpoint: "2. getUserSessions prop を呼び出し"
57
+ Application-Backend.API-Endpoint -> Database: "3. セッションデータを取得"
58
+ Database -> Application-Backend.API-Endpoint: "4. データを返す"
59
+ Application-Backend.API-Endpoint -> UserSessions-Component: "5. list と paging で promise を解決"
60
+ UserSessions-Component.Datatable -> User-Interaction: "6. セッションをレンダリング"
61
+ User-Interaction -> UserSessions-Component.Actions: "7. 「ログアウト」をクリック"
62
+ UserSessions-Component.Actions -> Application-Backend.API-Endpoint: "8. ログアウトリクエストを送信"
63
+ Application-Backend.API-Endpoint -> Database: "9. セッションを削除"
64
+ UserSessions-Component -> Application-Backend.API-Endpoint: "10. データを更新"
65
+ ```
66
+
67
+ ## 使用方法
68
+
69
+ `UserSessions` コンポーネントを使用するには、`user` オブジェクトと `getUserSessions` 関数を提供する必要があります。`getUserSessions` 関数は、バックエンドサービスからセッションデータを取得する役割を担います。
70
+
71
+ ```javascript Integration Example icon=lucide:code
72
+ import { UserSessions } from '@arcblock/blocklet-ui-react';
73
+ import { client } from './libs/client'; // API クライアントインスタンス
74
+
75
+ // セッションが表示される対象のユーザーオブジェクト。
76
+ const currentUser = {
77
+ did: 'z1...',
78
+ name: 'Alice',
79
+ // 他のユーザープロパティ
80
+ };
81
+
82
+ /**
83
+ * この関数はバックエンドからセッションデータを取得します。
84
+ * UserSessions コンポーネントは、新しいデータが必要になるたびにこの関数を呼び出します。
85
+ *
86
+ * @param {object} params - クエリパラメータ。
87
+ * @param {number} params.page - 現在のページ番号。
88
+ * @param {number} params.pageSize - ページごとのアイテム数。
89
+ * @param {string} params.status - フィルタリングするセッションのステータス('online'、'expired'、'offline')。
90
+ * @returns {Promise<{ list: UserSession[], paging: { total: number } }>} セッションデータに解決される Promise。
91
+ */
92
+ const fetchUserSessions = async ({ page, pageSize, status }) => {
93
+ const response = await client.user.getSessions({
94
+ page,
95
+ pageSize,
96
+ status,
97
+ });
98
+
99
+ // 返り値の形式がコンポーネントの要件と一致することを確認
100
+ return {
101
+ list: response?.list || [],
102
+ paging: {
103
+ total: response?.paging?.total || 0,
104
+ },
105
+ };
106
+ };
107
+
108
+ export default function MyAccountSessionsPage() {
109
+ return (
110
+ <div>
111
+ <h2>ログインセッションの管理</h2>
112
+ <UserSessions
113
+ user={currentUser}
114
+ getUserSessions={fetchUserSessions}
115
+ />
116
+ </div>
117
+ );
118
+ }
119
+ ```
120
+
121
+ ## Props
122
+
123
+ `UserSessions` コンポーネントは、その動作と外観をカスタマイズするために以下の props を受け入れます。
124
+
125
+ <x-field-group>
126
+ <x-field data-name="user" data-type="User" data-required="true">
127
+ <x-field-desc markdown>セッションが表示される対象のユーザーオブジェクト。コンポーネントは、セッションリストにコンテキストを提供するためにこれを必要とします。</x-field-desc>
128
+ </x-field>
129
+ <x-field data-name="getUserSessions" data-type="function" data-required="true">
130
+ <x-field-desc markdown>バックエンドからページ分割されたセッションデータを取得する役割を担う非同期関数。`page`、`pageSize`、`status` を含むオブジェクトを受け取り、`{ list: UserSession[], paging: { total: number } }` という形式のオブジェクトに解決される `Promise` を返す必要があります。</x-field-desc>
131
+ </x-field>
132
+ <x-field data-name="showAction" data-type="boolean" data-default="true" data-required="false">
133
+ <x-field-desc markdown>ログアウトボタンを含む「アクション」列の表示を制御します。`false` に設定すると、読み取り専用のビューが作成されます。</x-field-desc>
134
+ </x-field>
135
+ <x-field data-name="showUser" data-type="boolean" data-default="true" data-required="false">
136
+ <x-field-desc markdown>「ユーザー」列の表示を制御します。これは、各セッションのユーザーを識別する必要があるマルチユーザーまたは管理コンテキストで役立ちます。</x-field-desc>
137
+ </x-field>
138
+ <x-field data-name="showOffline" data-type="boolean" data-default="false" data-required="false">
139
+ <x-field-desc markdown>UIで「オフライン」フィルターオプションが利用可能かどうかを決定します。オフラインセッションは通常、現在アクティブではない長期間有効なセッションを表します。</x-field-desc>
140
+ </x-field>
141
+ <x-field data-name="showAppPid" data-type="boolean" data-default="false" data-required="false">
142
+ <x-field-desc markdown>セッションに関連付けられた Blocklet のプログラム ID を表示できる「App Pid」列の表示を制御します。</x-field-desc>
143
+ </x-field>
144
+ </x-field-group>
145
+
146
+ ## 表示情報
147
+
148
+ このコンポーネントは、データテーブル内の各セッションについて以下の情報をレンダリングします。
149
+
150
+ | 列 | 説明 |
151
+ | :--- | :--- |
152
+ | **プラットフォーム** | セッションのユーザーエージェント文字列から派生したオペレーティングシステムとバージョン(例:`Windows/10`)。 |
153
+ | **デバイスタイプ** | セッションに使用されたブラウザまたはアプリケーション(例:`Chrome/108.0.0`)。 |
154
+ | **ウォレットOS** | 接続されたDIDウォレットのオペレーティングシステム(利用可能な場合)。 |
155
+ | **App Pid** | セッションを作成した Blocklet のプログラム ID。(`showAppPid` が `true` の場合に表示)。 |
156
+ | **ユーザー** | セッションに関連付けられたユーザー。(`showUser` が `true` の場合に表示)。 |
157
+ | **作成日時** | セッションが最初に作成されたときのタイムスタンプ。 |
158
+ | **最終アクティブ** | 最後のアクティビティのタイムスタンプ。期限切れのセッションの場合、この列には「期限切れ」と表示されます。 |
159
+ | **最終ログインIP** | セッションの最後に確認されたIPアドレスと、その解決された地理的な地域。 |
160
+ | **アクション** | セッションからログアウトするためのボタンを提供します。(`showAction` が `true` の場合に表示)。 |
161
+
162
+ ---
163
+
164
+ 完全なユーザー管理インターフェースには、[UserCenter](./components-user-management-user-center.md) コンポーネント内で `UserSessions` コンポーネントを使用することを検討してください。