refactor: cleanup codebase — remove hydration guards, extract constants, fix bugs
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m20s

This commit is contained in:
2026-05-26 11:20:36 +02:00
parent 5c64bb00fa
commit b402b8f56e
23 changed files with 579 additions and 979 deletions
+12 -7
View File
@@ -1,5 +1,6 @@
'use client';
import { useMemo } from 'react';
import { useAttunementStore } from '@/lib/game/stores';
import { ATTUNEMENTS_DEF } from '@/lib/game/data/attunements';
import { Separator } from '@/components/ui/separator';
@@ -18,13 +19,17 @@ const SLOT_LABELS: Record<string, string> = {
export function AttunementStatus() {
const attunements = useAttunementStore((s) => s.attunements);
const activeAttunements = Object.entries(attunements)
.filter(([, state]) => state.active)
.sort(([, a], [, b]) => {
const orderA = Object.values(ATTUNEMENTS_DEF).findIndex(d => d.id === a.id);
const orderB = Object.values(ATTUNEMENTS_DEF).findIndex(d => d.id === b.id);
return orderA - orderB;
});
const attunementOrder = useMemo(() => {
const map = new Map<string, number>();
Object.values(ATTUNEMENTS_DEF).forEach((d, i) => map.set(d.id, i));
return map;
}, []);
const activeAttunements = useMemo(() => {
return Object.entries(attunements)
.filter(([, state]) => state.active)
.sort(([, a], [, b]) => (attunementOrder.get(a.id) ?? 0) - (attunementOrder.get(b.id) ?? 0));
}, [attunements, attunementOrder]);
const xpForNext = (level: number) => {
if (level <= 1) return 0;