Files
jiang13-bbs/frontend/lib/userEvents.ts
freefire 24c6dea38c feat: 完成头像上传、站点主题配置与UI优化
- 新增附件模型与上传服务,拆分头像上传/管理逻辑
- 重构用户资料接口,移除直接修改头像字段,改用专用上传接口
- 添加站点公开设置API与管理员外观配置页
- 全局替换hover背景为accent-soft,优化交互一致性
- 完善头像组件,支持图片加载失败回退与src更新重置
- 新增用户状态事件总线,解决同页头像更新不及时问题
- 调整依赖包顺序与CI依赖版本
- 重构板块列表接口,新增帖子计数
- 迁移账号设置到用户主页tab,合并重复代码
2026-09-15 01:06:12 +08:00

30 lines
1.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { User } from "./api";
/**
* 全局用户状态事件总线。
*
* 背景:Header 等客户端组件挂载在持久化的 root layout 上,仅靠
* router.refresh() 刷新 props 在上传/删除头像等场景下存在时序与
* Router Cache 的不确定性。同页内的数据更新必须走显式的状态链路
* (React 状态/事件),storage 事件、轮询等方案对本标签页无效。
*
* 任意位置修改了当前用户资料后 dispatch 一个补丁,Header 等订阅方
* 立即合并更新;router.refresh() 仍照常调用,负责校正服务端渲染区域。
*/
export const USER_UPDATED_EVENT = "j13:user-updated";
export function emitUserUpdate(patch: Partial<User>): void {
if (typeof window === "undefined") return;
window.dispatchEvent(new CustomEvent(USER_UPDATED_EVENT, { detail: patch }));
}
export function onUserUpdate(handler: (patch: Partial<User>) => void): () => void {
if (typeof window === "undefined") return () => {};
const listener = (e: Event) => {
const detail = (e as CustomEvent<Partial<User>>).detail;
if (detail) handler(detail);
};
window.addEventListener(USER_UPDATED_EVENT, listener);
return () => window.removeEventListener(USER_UPDATED_EVENT, listener);
}