import clsx from "clsx"; import { FC, HTMLAttributes, useEffect, useMemo, useState } from "react"; import { useDispatch } from "react-redux"; import { characterActions, CharacterUtils, Constants, } from "@dndbeyond/character-rules-engine/es"; import { Button } from "~/components/Button"; import { ConfirmModal } from "~/components/ConfirmModal"; import { XpManager } from "~/components/XpManager"; import { useCharacterEngine } from "~/hooks/useCharacterEngine"; import { toastMessageActions } from "~/tools/js/Shared/actions"; import styles from "./styles.module.css"; interface Props extends HTMLAttributes {} export const ProgressionManager: FC = ({ ...props }) => { const [isModalOpen, setIsModalOpen] = useState(false); const [newXpTotal, setNewXpTotal] = useState(null); const [shouldReset, setShouldReset] = useState(false); const dispatch = useDispatch(); const { currentXp, preferences, totalClassLevel, ruleData } = useCharacterEngine(); useEffect(() => { setShouldReset(newXpTotal === null); }, [newXpTotal]); const handleManageXpClick = (): void => { setIsModalOpen(true); }; const closeModal = (): void => { setNewXpTotal(null); setIsModalOpen(false); }; const onConfirm = (): void => { if (newXpTotal !== null) { closeModal(); dispatch(characterActions.xpSet(newXpTotal)); dispatch( toastMessageActions.toastSuccess( "Experience Points Updated", "You have successfully updated your XP" ) ); } }; const handleXpUpdates = (newXpTotal: number): void => { setNewXpTotal(newXpTotal); }; const levelDiff = useMemo(() => { const currentLevel = CharacterUtils.deriveXpLevel(currentXp, ruleData); return currentLevel - totalClassLevel; }, [currentXp, totalClassLevel]); return (
Character Level: {totalClassLevel} {preferences.progressionType === Constants.PreferenceProgressionTypeEnum.XP && levelDiff !== 0 && ( 0 && "progression-manager-heading-diff-positive", levelDiff < 0 && "progression-manager-heading-diff-negative", ])} > {Math.abs(levelDiff)} )}
{preferences.progressionType === Constants.PreferenceProgressionTypeEnum.MILESTONE ? (
Milestone Advancement
) : (
)}
); };