Files
openhuman/app/src/utils/userName.ts
T

31 lines
1.3 KiB
TypeScript

/**
* Resolve a human-friendly display name from a core-owned user snapshot,
* tolerating both camelCase and snake_case identity fields. Returns the
* literal `'User'` when nothing usable is present.
*
* Shared by the Home greeting and the bottom-bar avatar so both derive the
* same name from the same source.
*/
export function resolveUserName(user: unknown): string {
if (!user || typeof user !== 'object') return 'User';
const record = user as Record<string, unknown>;
const firstName =
(typeof record.firstName === 'string' && record.firstName.trim()) ||
(typeof record.first_name === 'string' && record.first_name.trim()) ||
'';
const lastName =
(typeof record.lastName === 'string' && record.lastName.trim()) ||
(typeof record.last_name === 'string' && record.last_name.trim()) ||
'';
const username = typeof record.username === 'string' ? record.username.trim() : '';
const email = typeof record.email === 'string' ? record.email.trim() : '';
const fullName = [firstName, lastName].filter(Boolean).join(' ').trim();
if (fullName) return fullName;
if (firstName) return firstName;
if (username) return username.startsWith('@') ? username : `@${username}`;
if (email) return email.split('@')[0] || 'User';
return 'User';
}