沉淀数字员工角色偏好状态

This commit is contained in:
baiyanyun
2026-06-09 09:34:39 +08:00
parent 2f9af0b173
commit 726369f5a9
9 changed files with 216 additions and 32 deletions

View File

@@ -1,4 +1,5 @@
import { createContext, useContext, useState, useCallback, type ReactNode } from 'react';
import { createContext, useContext, useState, useCallback, useEffect, type ReactNode } from 'react';
import { readDigitalEmployeeUiState, saveDigitalEmployeeUiStatePatch } from '@/lib/digitalUiStateBridge';
export type ConsoleRole = 'finance' | 'engineering' | 'executive' | 'hr' | 'sales';
export type MotionLevel = 'none' | 'minimal';
@@ -136,12 +137,32 @@ function getStoredRole(): ConsoleRole {
export function RoleProvider({ children }: { children: ReactNode }) {
const [role, setRoleState] = useState<ConsoleRole>(getStoredRole);
useEffect(() => {
let cancelled = false;
void readDigitalEmployeeUiState().then((state) => {
if (cancelled) return;
const storedRole = state?.consoleRole;
if (storedRole && storedRole in ROLE_PROFILES) {
setRoleState(storedRole as ConsoleRole);
try {
localStorage.setItem(STORAGE_KEY, storedRole);
localStorage.removeItem(LEGACY_STORAGE_KEY);
} catch { /* noop */ }
}
});
return () => { cancelled = true; };
}, []);
const setRole = useCallback((newRole: ConsoleRole) => {
setRoleState(newRole);
try {
localStorage.setItem(STORAGE_KEY, newRole);
localStorage.removeItem(LEGACY_STORAGE_KEY);
} catch { /* noop */ }
void saveDigitalEmployeeUiStatePatch(
{ consoleRole: newRole },
{ action: 'update_console_role', metadata: { role: newRole } },
);
}, []);
const profile = ROLE_PROFILES[role];