fix: resolve 22 remaining issues - type exports, dead code, state mutations, orphaned components
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m19s
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m19s
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import React, { useEffect, useState } from 'react';
|
||||
import React, { useEffect, useState, useCallback } from 'react';
|
||||
import { useDisciplineStore } from '@/lib/game/stores/discipline-slice';
|
||||
import type { DisciplineDefinition } from '@/lib/game/types/disciplines';
|
||||
import { baseDisciplines } from '@/lib/game/data/disciplines/base';
|
||||
@@ -33,6 +33,10 @@ interface DisciplineCardProps {
|
||||
drainBase: number;
|
||||
difficultyFactor: number;
|
||||
scalingFactor: number;
|
||||
xp: number;
|
||||
paused: boolean;
|
||||
concurrentLimit: number;
|
||||
onToggle: (id: string, paused: boolean) => void;
|
||||
}
|
||||
|
||||
const DisciplineCard: React.FC<DisciplineCardProps> = ({
|
||||
@@ -47,14 +51,14 @@ const DisciplineCard: React.FC<DisciplineCardProps> = ({
|
||||
drainBase,
|
||||
difficultyFactor,
|
||||
scalingFactor,
|
||||
xp,
|
||||
paused,
|
||||
concurrentLimit,
|
||||
onToggle,
|
||||
}) => {
|
||||
const activeIds = useDisciplineStore((s) => s.activeIds);
|
||||
const concurrentLimit = useDisciplineStore((s) => s.concurrentLimit);
|
||||
const currentDisc = useDisciplineStore((s) => s.disciplines[id] ?? { xp: 0, paused: true });
|
||||
|
||||
const displayXp = currentDisc.xp;
|
||||
const displayXp = xp;
|
||||
const progressPercent = Math.min(displayXp / Math.max(1, concurrentLimit * 100), 100);
|
||||
const isPaused = currentDisc.paused;
|
||||
const isPaused = paused;
|
||||
|
||||
const activeStatBonus = calculateStatBonus(baseValue, displayXp, scalingFactor);
|
||||
const estimatedDrain = calculateManaDrain(drainBase, displayXp, difficultyFactor);
|
||||
@@ -73,11 +77,7 @@ const DisciplineCard: React.FC<DisciplineCardProps> = ({
|
||||
}, []);
|
||||
|
||||
const toggleAction = () => {
|
||||
if (isPaused) {
|
||||
useDisciplineStore.getState().activate(id);
|
||||
} else {
|
||||
useDisciplineStore.getState().deactivate(id);
|
||||
}
|
||||
onToggle(id, isPaused);
|
||||
};
|
||||
|
||||
return (
|
||||
@@ -135,7 +135,11 @@ const DisciplineCard: React.FC<DisciplineCardProps> = ({
|
||||
};
|
||||
|
||||
export const DisciplinesTab: React.FC = () => {
|
||||
const { activeIds, concurrentLimit } = useDisciplineStore();
|
||||
const activeIds = useDisciplineStore((s) => s.activeIds);
|
||||
const concurrentLimit = useDisciplineStore((s) => s.concurrentLimit);
|
||||
const disciplines = useDisciplineStore((s) => s.disciplines);
|
||||
const activate = useDisciplineStore((s) => s.activate);
|
||||
const deactivate = useDisciplineStore((s) => s.deactivate);
|
||||
|
||||
const [mounted, setMounted] = useState(false);
|
||||
const [activeAttunement, setActiveAttunement] = useState<string>('base');
|
||||
@@ -144,6 +148,14 @@ export const DisciplinesTab: React.FC = () => {
|
||||
setMounted(true);
|
||||
}, []);
|
||||
|
||||
const handleToggle = useCallback((id: string, paused: boolean) => {
|
||||
if (paused) {
|
||||
activate(id);
|
||||
} else {
|
||||
deactivate(id);
|
||||
}
|
||||
}, [activate, deactivate]);
|
||||
|
||||
if (!mounted) {
|
||||
return (
|
||||
<div className="flex items-center justify-center p-8 text-gray-500">
|
||||
@@ -177,22 +189,29 @@ export const DisciplinesTab: React.FC = () => {
|
||||
|
||||
{/* Discipline cards — only render active tab */}
|
||||
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
|
||||
{activeTab?.items.map((disc) => (
|
||||
<DisciplineCard
|
||||
key={disc.id}
|
||||
id={disc.id}
|
||||
name={disc.name}
|
||||
description={disc.description}
|
||||
perkThresholds={disc.perks?.map((p) => p.threshold)}
|
||||
perkValues={disc.perks?.map((p) => p.value)}
|
||||
perkTypes={disc.perks?.map((p) => p.type)}
|
||||
statBonus={disc.statBonus.stat}
|
||||
baseValue={disc.statBonus.baseValue}
|
||||
drainBase={disc.drainBase}
|
||||
difficultyFactor={disc.difficultyFactor}
|
||||
scalingFactor={disc.scalingFactor}
|
||||
/>
|
||||
))}
|
||||
{activeTab?.items.map((disc) => {
|
||||
const discState = disciplines[disc.id] ?? { xp: 0, paused: true };
|
||||
return (
|
||||
<DisciplineCard
|
||||
key={disc.id}
|
||||
id={disc.id}
|
||||
name={disc.name}
|
||||
description={disc.description}
|
||||
perkThresholds={disc.perks?.map((p) => p.threshold)}
|
||||
perkValues={disc.perks?.map((p) => p.value)}
|
||||
perkTypes={disc.perks?.map((p) => p.type)}
|
||||
statBonus={disc.statBonus.stat}
|
||||
baseValue={disc.statBonus.baseValue}
|
||||
drainBase={disc.drainBase}
|
||||
difficultyFactor={disc.difficultyFactor}
|
||||
scalingFactor={disc.scalingFactor}
|
||||
xp={discState.xp}
|
||||
paused={discState.paused}
|
||||
concurrentLimit={concurrentLimit}
|
||||
onToggle={handleToggle}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
|
||||
{/* Summary info */}
|
||||
|
||||
Reference in New Issue
Block a user