import { orderBy } from "lodash"; import { FC, HTMLAttributes, useMemo, useState } from "react"; import { DiceContract, DiceUtils } from "@dndbeyond/character-rules-engine"; import { Button } from "~/components/Button"; import { useCharacterEngine } from "~/hooks/useCharacterEngine"; import { HpManageModal } from "../HpManageModal"; import styles from "./styles.module.css"; export interface HpSummaryProps extends HTMLAttributes {} export const HpSummary: FC = ({ className, ...props }) => { const [isModalOpen, setIsModalOpen] = useState(false); const { hpInfo } = useCharacterEngine(); const openModal = () => { setIsModalOpen(true); }; const closeModal = () => { setIsModalOpen(false); }; const hitDiceStrings = useMemo(() => { const hitDice = hpInfo.classesHitDice.map( (classHitDice) => classHitDice.dice ); const combinedHitDice: Array = []; hitDice.forEach((hitDie) => { const existingDieIdx = combinedHitDice.findIndex( (hitDice) => hitDice.diceValue === hitDie.diceValue ); if (existingDieIdx > -1) { let existingDie = combinedHitDice[existingDieIdx]; combinedHitDice[existingDieIdx] = { ...combinedHitDice[existingDieIdx], diceCount: (existingDie.diceCount !== null ? existingDie.diceCount : 0) + (hitDie.diceCount !== null ? hitDie.diceCount : 0), }; } else { combinedHitDice.push(hitDie); } }); return orderBy(combinedHitDice, ["diceValue"]).map((hitDie) => DiceUtils.renderDie(hitDie) ); }, [hpInfo]); return (

Max Hit Points: {hpInfo.totalHp}

Hit Dice: {hitDiceStrings.join(" + ")}

); };