Fix third-party binding states and unify Telegram button styling in Account Management - #1904
Conversation
button styling - Show “Not enabled” for WeChat when status.wechat_login is false. - Refresh /api/status on PersonalSetting mount and persist via setStatusData to avoid stale flags, enabling binding after admin turns on OAuth. - Unify Telegram button styling with other providers; open a modal to render TelegramLoginButton for binding; align disabled “Not enabled” and “Bound” states. - Introduce isBound helper and reuse across providers (email/GitHub/OIDC/ LinuxDO/WeChat) to simplify checks and prevent falsy-ID issues.
WalkthroughFetches server /api/status on PersonalSetting mount to replace or refresh local storage status, uses imported setStatusData, and configures Turnstile accordingly; refactors AccountManagement to use an isBound helper and moves Telegram binding into a modal with a TelegramLoginButton. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
actor User
participant PersonalSetting
participant LocalStorage as localStorage
participant API as /api/status
participant Helpers as helpers.setStatusData
participant Turnstile
User->>PersonalSetting: mount
PersonalSetting->>LocalStorage: read saved
LocalStorage-->>PersonalSetting: parsed (optional)
alt local parsed exists
PersonalSetting->>PersonalSetting: setStatus(parsed)
alt parsed.turnstile_check
PersonalSetting->>Turnstile: enable(siteKey=parsed.turnstile_site_key)
else
PersonalSetting->>Turnstile: disable / clear siteKey
end
end
Note over PersonalSetting,API: server refresh to avoid stale flags
PersonalSetting->>API: GET /api/status
API-->>PersonalSetting: data
PersonalSetting->>PersonalSetting: setStatus(data)
PersonalSetting->>Helpers: setStatusData(data)
alt data.turnstile_check
PersonalSetting->>Turnstile: enable(siteKey=data.turnstile_site_key)
else
PersonalSetting->>Turnstile: disable / clear siteKey
end
PersonalSetting->>PersonalSetting: getUserData()
sequenceDiagram
autonumber
actor User
participant AccountManagement
participant Modal as TelegramBindModal
participant Telegram as TelegramLoginButton
User->>AccountManagement: view account bindings
AccountManagement->>AccountManagement: isBound(telegram_id)?
alt bound
AccountManagement-->>User: show "已绑定" (disabled)
else not bound
User->>AccountManagement: click "绑定"
AccountManagement->>Modal: open modal
Modal-->>User: displays TelegramLoginButton
User->>Telegram: authenticate
Telegram-->>AccountManagement: binding result/callback
AccountManagement->>AccountManagement: update bound state
AccountManagement->>Modal: close
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
web/src/components/settings/PersonalSetting.jsx(2 hunks)web/src/components/settings/personal/cards/AccountManagement.jsx(9 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
web/src/components/settings/personal/cards/AccountManagement.jsx (1)
web/src/components/settings/PersonalSetting.jsx (2)
userState(44-44)status(57-57)
web/src/components/settings/PersonalSetting.jsx (1)
web/src/helpers/data.js (1)
setStatusData(20-55)
Fix third-party binding states and unify Telegram button styling in Account Management


PR 类型
PR 是否包含破坏性更新?
PR 描述
close #1902
本 PR 主要修复账户设置页第三方绑定的三处问题,并统一 Telegram 按钮的交互
样式:
为 false 时显示“未启用”,并禁用操作按钮。
个人设置页时强制拉取最新 /api/status 并通过 setStatusData 刷新本地缓存,
避免使用过期的启用标志,确保“绑定”按钮可点击。
按钮;点击“绑定”后弹出 Modal,在弹窗中渲染官方 TelegramLoginButton 完成授
权;“未启用/已绑定”状态的禁用样式也与其它按钮一致。
实现细节:
正 email/GitHub/OIDC/LinuxDO/WeChat 等 provider 的禁用条件与文案。
储与上下文,防止因缓存导致的启用状态不一致。
效果
Summary by CodeRabbit
New Features
Bug Fixes