UNPKG

@blocklet/ui-react

Version:

Some useful front-end web components that can be used in Blocklets.

148 lines (113 loc) 7.94 kB
# UserCenter `UserCenter` 组件是一个全面的、预构建的界面,提供完整的用户个人资料和设置管理页面。它集成了多种功能,包括用户信息显示、通行证管理、隐私控制、通知设置和 DID 存储管理,为用户提供了一个集中的枢纽。 该组件被设计为高度可扩展,允许开发者通过 blocklet 的元数据添加自定义标签页和内容,从而确保在不同应用中提供一致的用户体验。 <!-- DIAGRAM_IMAGE_START:architecture:4:3:1765962229 --> ![UserCenter](assets/diagram/user-center-diagram-0.zh.jpg) <!-- DIAGRAM_IMAGE_END --> ## 基本用法 要使用 `UserCenter`,您需要提供 `currentTab` 属性,它决定了哪个部分是活动的。该值通常从应用的路由器中获取。 ```javascript UserCenter Example icon=logos:react import React from 'react'; import { UserCenter } from '@blocklet/ui-react'; export default function ProfilePage() { // 在实际应用中,您会从路由器中获取此值。 // 例如,如果 URL 是 /profile/settings,currentTab 的值将是 '/profile/settings'。 const currentTab = '/profile/nfts'; return <UserCenter currentTab={currentTab} />; } ``` ## 属性 `UserCenter` 组件接受多个属性来自定义其行为和外观。 <x-field-group> <x-field data-name="children" data-type="React.ReactNode" data-required="false"> <x-field-desc markdown>用于为 blocklet 导航设置中定义的自定义标签页渲染内容。当 `currentTab` 与自定义标签页的 URL 匹配时,`UserCenter` 将显示子组件。</x-field-desc> </x-field> <x-field data-name="currentTab" data-type="string" data-required="true"> <x-field-desc markdown>当前活动标签页的值。该值应与可用标签页之一(默认或自定义)的 `value` 属性匹配。它用于高亮显示正确的标签页并展示其对应的内容。</x-field-desc> </x-field> <x-field data-name="userDid" data-type="string" data-required="false"> <x-field-desc markdown>要显示其个人资料的用户的 DID。如果省略,组件将尝试从 URL 查询参数(`?did=...`)中获取 DID,或默认使用当前登录的用户。</x-field-desc> </x-field> <x-field data-name="embed" data-type="boolean" data-default="false" data-required="false"> <x-field-desc markdown>如果设置为 `true`,组件将以嵌入模式渲染,不包含主要的 `Header` 和 `Footer`,使其适合集成到其他布局或页面中。</x-field-desc> </x-field> <x-field data-name="onlyProfile" data-type="boolean" data-default="false" data-required="false"> <x-field-desc markdown>如果设置为 `true`,则仅显示 `UserBasicInfo` 个人资料卡片,不包含任何标签页或内容部分。这在仅需要紧凑型用户个人资料的场景下非常有用。</x-field-desc> </x-field> <x-field data-name="hideFooter" data-type="boolean" data-default="false" data-required="false"> <x-field-desc markdown>如果设置为 `true`,`Footer` 组件将不会被渲染。</x-field-desc> </x-field> <x-field data-name="headerProps" data-type="object" data-required="false"> <x-field-desc markdown>传递给底层 `Header` 组件以进行自定义的属性。</x-field-desc> </x-field> <x-field data-name="footerProps" data-type="object" data-required="false"> <x-field-desc markdown>传递给底层 `Footer` 组件以进行自定义的属性。</x-field-desc> </x-field> <x-field data-name="onDestroySelf" data-type="() => void" data-required="false"> <x-field-desc markdown>当非所有者用户从设置中的“危险区域”发起账户删除流程时触发的回调函数。</x-field-desc> </x-field> <x-field data-name="notLoginContent" data-type="React.ReactNode" data-required="false"> <x-field-desc markdown>当没有用户登录且未提供 `userDid` 时显示的自定义内容。如果未设置,则显示默认的登录提示。</x-field-desc> </x-field> </x-field-group> ## 核心功能 `UserCenter` 由几个关键部分和组件组成,提供开箱即用的丰富用户体验。 ### 默认标签页 默认情况下,`UserCenter` 为每个用户包含以下标签页: | 标签页 | 描述 | 可见性 | | ------------------- | ------------------------------------------------------------------------------ | --------------- | | **NFT** | 显示用户的 NFT 收藏。 | 公开 | | **社交动态** | 如果启用了社交功能,则显示用户的关注者和正在关注列表。 | 公开 | | **设置** | 访问个人资料、隐私、通知和会话管理。 | 仅所有者可见 | | **存储** | 用于管理与 DID Spaces 的连接以进行去中心化存储的界面。 | 仅所有者可见 | ### 用户个人资料 (`UserBasicInfo`) `UserBasicInfo` 组件是一个专用部分(在桌面上通常是侧边栏),用于显示用户的基本详细信息: - **头像和姓名**:显示用户的个人资料图片和全名。所有者可以点击头像打开个人资料切换器。 - **DID**:显示用户的去中心化标识符,并提供复制或查看其二维码的选项。 - **社交操作**:对于公开的个人资料,显示“关注”或“取消关注”按钮。 - **元数据**:显示用户提供的信息,如简介、位置和社交链接。 - **私密信息**:对于所有者,显示电子邮件和电话号码等私密详细信息。 ### 通行证管理 在主个人资料标签页(NFT)上,当前登录的用户会看到一个专门用于其 DID 通行证的部分。该区域列出了所有关联的通行证,标明其状态(例如,活动、已吊销),并高亮显示当前正在使用的通行证。 ### 设置 “设置”标签页是一个综合面板,仅对拥有该个人资料的用户可见。它分为几个子部分: - **通用设置**:允许用户更新其公开的个人资料信息,如姓名、简介和社交链接。 - **通知管理**:配置接收通知的方式(钱包、电子邮件、推送)并管理 Webhook。 - **第三方登录**:管理与其他身份提供商(如 Google、GitHub 或 Passkeys)的连接。 - **隐私管理**:控制用户个人资料上不同标签页的可见性,将其设置为公开或私密。 - **会话管理**:查看并撤销不同设备上的活动登录会话。 - **危险区域**:为非所有者角色提供删除自己账户的选项。 ## 自定义 您可以通过 blocklet 的配置添加新的标签页来扩展 `UserCenter`。 1. **在 `blocklet.yml` 中定义自定义标签页** 在您的 `blocklet.yml` 文件中,向 `navigation.userCenter` 数组添加条目。每个条目代表一个新的标签页。 ```yaml blocklet.yml icon=mdi:code-block-tags navigation: - title: User Center role: guest userCenter: - title: My Activity link: /profile/activity icon: 'material-symbols:history' # 如果此标签页应仅对个人资料所有者可见,则设置为 true private: false ``` 2. **为自定义标签页渲染内容** 在您的组件中,传递一个子元素,当 `currentTab` 属性与您定义的 `link` 匹配时,该子元素将被渲染。 ```javascript MyActivity.js icon=logos:react import React from 'react'; import { UserCenter } from '@blocklet/ui-react'; function MyActivityComponent() { return <div>This is the custom activity content.</div>; } export default function ProfilePageWithActivity() { // 此值将来自您的路由器,例如 '/profile/activity' const currentTab = '/profile/activity'; return ( <UserCenter currentTab={currentTab}> {currentTab === '/profile/activity' && <MyActivityComponent />} </UserCenter> ); } ``` 这种方法允许您将特定于应用的页面无缝集成到标准的 `UserCenter` 布局中。