Some checks failed
CI / Lint & Typecheck (push) Has been cancelled
CI / Test (routes) (push) Has been cancelled
CI / Test (security) (push) Has been cancelled
CI / Test (services) (push) Has been cancelled
CI / Test (unit) (push) Has been cancelled
CI / Test (integration) (push) Has been cancelled
CI / Test Coverage (push) Has been cancelled
CI / Build (push) Has been cancelled
47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
/**
|
|
* Shared utilities for user components
|
|
*/
|
|
|
|
/**
|
|
* Generate proxied avatar URL for user thumbnails
|
|
*/
|
|
export function getAvatarUrl(
|
|
serverId: string | null | undefined,
|
|
thumbUrl: string | null | undefined,
|
|
size = 100
|
|
): string | null {
|
|
if (!thumbUrl) return null;
|
|
// If thumbUrl is already a full URL (e.g., from Plex.tv), use it directly
|
|
if (thumbUrl.startsWith('http')) return thumbUrl;
|
|
// Otherwise, proxy through our server
|
|
if (!serverId) return null;
|
|
return `/api/v1/images/proxy?server=${serverId}&url=${encodeURIComponent(thumbUrl)}&width=${size}&height=${size}&fallback=avatar`;
|
|
}
|
|
|
|
/**
|
|
* Get text color class based on trust score
|
|
*/
|
|
export function getTrustScoreColor(score: number): string {
|
|
if (score >= 80) return 'text-green-500';
|
|
if (score >= 50) return 'text-yellow-500';
|
|
return 'text-red-500';
|
|
}
|
|
|
|
/**
|
|
* Get background color class based on trust score
|
|
*/
|
|
export function getTrustScoreBg(score: number): string {
|
|
if (score >= 80) return 'bg-green-500/20';
|
|
if (score >= 50) return 'bg-yellow-500/20';
|
|
return 'bg-red-500/20';
|
|
}
|
|
|
|
/**
|
|
* Medal configuration for podium ranks
|
|
*/
|
|
export const MEDALS = {
|
|
1: { emoji: '🥇', color: 'from-yellow-400 to-yellow-600', bgColor: 'from-yellow-500/10 to-yellow-600/5', size: 'h-20 w-20' },
|
|
2: { emoji: '🥈', color: 'from-gray-300 to-gray-500', bgColor: 'from-gray-400/10 to-gray-500/5', size: 'h-16 w-16' },
|
|
3: { emoji: '🥉', color: 'from-amber-600 to-amber-800', bgColor: 'from-amber-500/10 to-amber-600/5', size: 'h-16 w-16' },
|
|
} as const;
|