fix(ui): consistent attribute badge colors based on value hash across all views
All checks were successful
CI / cleanup-branch (push) Has been skipped
CI / build (push) Successful in 59s
CI / docker (push) Successful in 55s
CI / deploy-feature (push) Has been skipped
CI / deploy (push) Successful in 35s

This commit is contained in:
hsiegeln
2026-03-28 15:37:49 +01:00
parent 626501cb04
commit 01c6d5c131
4 changed files with 31 additions and 5 deletions

View File

@@ -0,0 +1,24 @@
import type { ReactNode } from 'react';
/**
* Deterministic color for attribute badges.
* Uses the value (not the key) to compute the color,
* ensuring the same value always gets the same color
* regardless of where it's displayed.
*
* Returns a BadgeColor that the design system accepts.
*/
const COLORS = ['primary', 'success', 'warning', 'running'] as const;
type BadgeColor = 'primary' | 'success' | 'warning' | 'error' | 'running' | 'auto';
function hashString(s: string): number {
let hash = 0;
for (let i = 0; i < s.length; i++) {
hash = ((hash << 5) - hash + s.charCodeAt(i)) | 0;
}
return Math.abs(hash);
}
export function attributeBadgeColor(value: string): BadgeColor {
return COLORS[hashString(value) % COLORS.length];
}