fix(dashboard): добавлено определение loadPetHero (ReferenceError на проде)

Функция loadPetHero вызывалась, но её тело не попало в коммит
667054f (Edit не применился). Восстановлено: рендер питомца через
PetSprite + загрузка /api/pet, как и задумано.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-31 11:18:46 +03:00
parent c6662b3056
commit 5c611166f3
+35
View File
@@ -3261,6 +3261,41 @@
document.getElementById('hc-lab-meta').textContent = 'Освой: ' + lab.goal;
}
/* ══ HERO: Pet (synced with /pet module via /api/pet + PetSprite) ═ */
async function loadPetHero() {
const card = document.getElementById('hc-pet');
if (!card) return;
let d;
try { d = await LS.api('/api/pet'); }
catch { card.style.display = 'none'; return; } // фича питомца выключена
if (!d) { card.style.display = 'none'; return; }
// Sprite — единый рендер из pet-sprite.js (как на /pet)
const art = document.getElementById('hc-pet-art');
if (art && window.PetSprite) {
art.innerHTML = PetSprite.render(d.petLevel || 1, d.mood || 'neutral', d.accessories || [], d.petColor || 'purple', d.streakCurrent || 0);
}
document.getElementById('hc-pet-name').textContent = d.petName || 'Квантик';
document.getElementById('hc-pet-lvl').textContent = d.petLevel || 1;
// XP до следующего уровня питомца
const cur = d.xpForCurrLevel || 0;
const next = d.xpForNextLevel; // null = макс
const have = Math.max(0, (d.xp || 0) - cur);
const need = next != null ? Math.max(1, next - cur) : have;
const pct = next != null ? Math.min(100, Math.round(have / need * 100)) : 100;
document.getElementById('hc-pet-xp').textContent = have;
document.getElementById('hc-pet-xpmax').textContent = next != null ? need : '—';
document.getElementById('hc-pet-prog').style.width = pct + '%';
// Стрик / цель дня / настроение
document.getElementById('hc-pet-streak').textContent = d.streakCurrent || 0;
const quests = d.quests || [];
const doneCnt = quests.filter(q => q.done).length;
document.getElementById('hc-pet-goal').textContent = quests.length ? `${doneCnt}/${quests.length}` : '—';
document.getElementById('hc-pet-mood').textContent = window.PetSprite ? PetSprite.moodLabel(d.mood) : (d.mood || 'бодр');
}
/* ══ ACTIVITY: data structure ══════════════════════════════════════ */
let _activityRows = []; // raw history rows
let _hmScale = 12; // weeks to show