import React, { useState } from "react"; import skillsFile from "../../data/skills.yml"; import { ClassEntry } from "../types"; import { autoResize } from "../utils"; type SkillPickerTarget = { list: "primary" | "other"; idx: number }; function formatSkillLine(t: SkillTemplate): string { return `• ${t.name} (${t.class}, max SL ${t.max_level}): ${t.description}`; } interface ClassesPageProps { isActive: boolean; primaryClasses: ClassEntry[]; setPrimaryClasses: React.Dispatch>; otherClasses: ClassEntry[]; setOtherClasses: React.Dispatch>; heroicSkills: string; onHeroicSkillsChange: (v: string) => void; } export default function ClassesPage({ isActive, primaryClasses, setPrimaryClasses, otherClasses, setOtherClasses, heroicSkills, onHeroicSkillsChange, }: ClassesPageProps) { const [skillPickerTarget, setSkillPickerTarget] = useState(null); const [skillCategory, setSkillCategory] = useState("all"); const allSkills = (skillsFile as SkillsFile).skills; const skillCategories = ["all", ...Array.from(new Set(allSkills.map((s) => s.class))).sort()]; const visibleSkills = skillCategory === "all" ? allSkills : allSkills.filter((s) => s.class === skillCategory); const appendSkill = (target: SkillPickerTarget, line: string) => { const setter = target.list === "primary" ? setPrimaryClasses : setOtherClasses; setter((prev) => prev.map((c, i) => i === target.idx ? { ...c, skills: c.skills ? c.skills + "\n" + line : line } : c ) ); }; const openSkillPicker = (target: SkillPickerTarget, className: string) => { const match = allSkills.find((s) => s.class.toLowerCase() === className.trim().toLowerCase()); setSkillCategory(match ? match.class : "all"); setSkillPickerTarget(target); }; return (
Primary Classes (up to 3)
{primaryClasses.map((cls, idx) => (
setPrimaryClasses((prev) => prev.map((c, i) => (i === idx ? { ...c, name: e.target.value } : c)) ) } /> setPrimaryClasses((prev) => prev.map((c, i) => (i === idx ? { ...c, benefits: e.target.value } : c)) ) } />