Refactor character class handling across components: Replace hardcoded character class definitions with a centralized CHARACTER_CLASSES import, enhancing maintainability and consistency. Update ProfileForm, Leaderboard, and LeaderboardSection components to utilize new utility functions for character class icons and names, improving code clarity and reducing duplication.
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 2m48s

This commit is contained in:
Julien Froidefond
2025-12-15 10:08:12 +01:00
parent 7dfd426d1f
commit 1e865330a0
7 changed files with 191 additions and 199 deletions

118
lib/character-classes.ts Normal file
View File

@@ -0,0 +1,118 @@
export type CharacterClass =
| "WARRIOR"
| "MAGE"
| "ROGUE"
| "RANGER"
| "PALADIN"
| "ENGINEER"
| "MERCHANT"
| "SCHOLAR"
| "BERSERKER"
| "NECROMANCER";
export interface CharacterClassConfig {
value: CharacterClass;
name: string;
icon: string;
desc?: string;
}
export const CHARACTER_CLASSES: CharacterClassConfig[] = [
{
value: "WARRIOR",
name: "Guerrier",
icon: "⚔️",
desc: "Maître du combat au corps à corps",
},
{
value: "MAGE",
name: "Mage",
icon: "🔮",
desc: "Manipulateur des arcanes",
},
{
value: "ROGUE",
name: "Voleur",
icon: "🗡️",
desc: "Furtif et mortel",
},
{
value: "RANGER",
name: "Rôdeur",
icon: "🏹",
desc: "Chasseur des terres sauvages",
},
{
value: "PALADIN",
name: "Paladin",
icon: "🛡️",
desc: "Protecteur sacré",
},
{
value: "ENGINEER",
name: "Ingénieur",
icon: "⚙️",
desc: "Créateur d'artefacts",
},
{
value: "MERCHANT",
name: "Marchand",
icon: "💰",
desc: "Maître du commerce",
},
{
value: "SCHOLAR",
name: "Érudit",
icon: "📚",
desc: "Gardien du savoir",
},
{
value: "BERSERKER",
name: "Berserker",
icon: "🔥",
desc: "Rage destructrice",
},
{
value: "NECROMANCER",
name: "Nécromancien",
icon: "💀",
desc: "Maître des morts",
},
];
export const CHARACTER_CLASS_MAP: Record<CharacterClass, CharacterClassConfig> =
CHARACTER_CLASSES.reduce(
(acc, cls) => {
acc[cls.value] = cls;
return acc;
},
{} as Record<CharacterClass, CharacterClassConfig>
);
export function getCharacterClassIcon(
characterClass: CharacterClass | null | undefined
): string {
if (!characterClass) return "";
return CHARACTER_CLASS_MAP[characterClass]?.icon || "";
}
export function getCharacterClassName(
characterClass: CharacterClass | null | undefined
): string {
if (!characterClass) return "";
return CHARACTER_CLASS_MAP[characterClass]?.name || "";
}
export function getCharacterClassConfig(
characterClass: CharacterClass | null | undefined
): CharacterClassConfig | null {
if (!characterClass) return null;
return CHARACTER_CLASS_MAP[characterClass] || null;
}
export function isValidCharacterClass(
characterClass: string | null | undefined
): characterClass is CharacterClass {
if (!characterClass) return false;
return characterClass in CHARACTER_CLASS_MAP;
}