import clsx from "clsx"; import { FC, HTMLAttributes, useState } from "react"; import { useDispatch } from "react-redux"; import { Accordion } from "~/components/Accordion"; import { Button } from "~/components/Button"; import { useCharacterEngine } from "~/hooks/useCharacterEngine"; import { builderActions } from "~/tools/js/CharacterBuilder/actions"; import ClassDisplaySimple from "~/tools/js/CharacterBuilder/components/ClassDisplaySimple"; import SpeciesDisplaySimple from "~/tools/js/CharacterBuilder/components/SpeciesDisplaySimple"; import { ClassDefinitionContract, RaceDefinitionContract } from "~/types"; import { PortraitName } from "../../components/PortraitName"; import { ClassChoose } from "../ClassChoose"; import { SpeciesChoose } from "../SpeciesChoose"; import styles from "./styles.module.css"; export interface QuickBuildProps extends HTMLAttributes {} export const QuickBuild: FC = ({ className, ...props }) => { const dispatch = useDispatch(); const { raceUtils, ruleData } = useCharacterEngine(); const [species, setSpecies] = useState(null); const [charClass, setCharClass] = useState( null ); const [name, setName] = useState(""); const [isClassesOpen, setIsClassesOpen] = useState(false); const [isSpeciesOpen, setIsSpeciesOpen] = useState(false); const handleSubmit = (): void => { dispatch( builderActions.quickBuildRequest( species ? raceUtils.getEntityRaceId(species) : null, species ? raceUtils.getEntityRaceTypeId(species) : null, charClass ? charClass.id : null, name ) ); }; const handleSelectSpecies = (species: RaceDefinitionContract): void => { setSpecies(species); }; const handleRemoveSpecies = (): void => { setSpecies(null); setIsSpeciesOpen(true); }; const handleSelectClass = (charClass: ClassDefinitionContract): void => { setCharClass(charClass); }; const handleRemoveClass = (): void => { setCharClass(null); setIsClassesOpen(true); }; return (

Quick Build

To create a level 1 character with recommended starting options, choose a class and species below. You can provide a character name or leave it blank to randomize one.


{charClass ? ( ) : ( Choose Class} variant="text" resetOpen={isClassesOpen} > )} {species ? ( ) : ( Choose Species} variant="text" resetOpen={isSpeciesOpen} > )}
); };