Files
blitzkit/packages/website/src/components/CrewSkillManager.tsx
T

52 lines
1.6 KiB
TypeScript
Raw Normal View History

2024-11-29 13:20:27 -06:00
import { asset, permanentSkills, romanize } from '@blitzkit/core';
import { Flex } from '@radix-ui/themes';
2024-11-29 13:20:27 -06:00
import { awaitableSkillDefinitions } from '../core/awaitables/skillDefinitions';
import { GenericTankComponentButton } from './ModuleButtons/GenericTankComponentButton';
interface CrewSkillManagerProps {
skillLevels: Record<string, number>;
onChange?: (skillLevels: Record<string, number>) => void;
}
2024-11-29 13:20:27 -06:00
const skillDefinitions = await awaitableSkillDefinitions;
2024-09-21 20:26:58 -05:00
export function CrewSkillManager({
skillLevels,
onChange,
}: CrewSkillManagerProps) {
return (
<Flex direction="column" gap="2">
2024-10-06 00:02:50 -05:00
{Object.entries(skillDefinitions.classes).map(([tankClass, skills]) => (
<Flex gap="2" key={tankClass}>
{skills.skills.map((skill) => {
const level = skillLevels[skill];
2024-10-06 00:02:50 -05:00
return (
<GenericTankComponentButton
key={skill}
special={!permanentSkills.includes(skill)}
selected={level > 0}
2024-10-25 10:57:49 -05:00
discriminator={level === 0 ? undefined : romanize(level)}
2024-10-06 00:02:50 -05:00
icon={asset(`icons/skills/${skill}.webp`)}
onClick={(event) => {
if (!onChange) return;
const draft = { ...skillLevels };
if (event.shiftKey) {
draft[skill] = draft[skill] === 0 ? 7 : 0;
} else {
draft[skill] = level - 1;
if (draft[skill] < 0) draft[skill] = 7;
}
2024-10-06 00:02:50 -05:00
onChange(draft);
}}
/>
);
})}
</Flex>
))}
</Flex>
);
}