import clsx from "clsx"; import { FC, HTMLAttributes, useEffect, useState } from "react"; import { useSelector } from "react-redux"; import VideoIcon from "@dndbeyond/fontawesome-cache/svgs/solid/video.svg"; import CloseIcon from "@dndbeyond/fontawesome-cache/svgs/solid/x.svg"; import { Button } from "~/components/Button"; import { Dialog } from "~/components/Dialog"; import { MaxCharactersDialog } from "~/components/MaxCharactersDialog"; import { useAuth } from "~/contexts/Authentication"; import { useClaimCharacter } from "~/hooks/useClaimCharacter"; import { appEnvSelectors } from "~/tools/js/Shared/selectors"; import { ClaimConfirmationDialog } from "../ClaimConfirmationDialog"; import styles from "./styles.module.css"; export interface WatchTourDialogProps extends HTMLAttributes {} export const WatchTourDialog: FC = ({ className, ...props }) => { const [isOpen, setIsOpen] = useState(false); const [isMaxCharacterMessageOpen, setIsMaxCharacterMessageOpen] = useState(false); const user = useAuth(); const { characterSlotLimit, activeCharacterCount } = useSelector( appEnvSelectors.getCharacterSlots ); // Character slot limit is null for admin accounts const hasOpenSlot = characterSlotLimit === null || activeCharacterCount < characterSlotLimit; const signedIn = !!user; const signupLink = `/create-account?returnUrl=${window.location.pathname}`; const params = new URLSearchParams(globalThis.location.search); const campaignJoinCode = params.get("campaignJoinCode"); const isAssigned = params.get("isAssigned") !== "false"; const [ claimCharacter, isClaimingCharacter, isFinishedClaimingCharacter, newCharacterId, campaignId, ] = useClaimCharacter({ campaignJoinCode, isAssigned, }); const handleOpen = () => setIsOpen(true); const handleClose = () => setIsOpen(false); const handleClaim = () => { if (hasOpenSlot) { claimCharacter(); } else { setIsMaxCharacterMessageOpen(true); setIsOpen(false); } }; useEffect(() => { if (isFinishedClaimingCharacter) { setIsOpen(false); } }, [isFinishedClaimingCharacter]); return ( <>

D&D Beyond Character Sheet Tour