mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-30 23:14:37 +00:00
31 lines
1.3 KiB
TypeScript
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';
|
|
}
|