import React, { useContext } from "react"; import { Collapsible, CollapsibleHeaderContent, CollapsibleHeading, } from "@dndbeyond/character-components/es"; import { CampaignUtils, CharacterTheme, Container, ContainerUtils, InventoryManager, CharacterCurrencyContract, Item, ItemUtils, PartyInfo, RuleData, CoinManager, } from "@dndbeyond/character-rules-engine/es"; import { ItemName } from "~/components/ItemName"; import { NumberDisplay } from "~/components/NumberDisplay"; import CurrencyCollapsible from "../../../CharacterSheet/components/CurrencyCollapsible"; import { CurrencyErrorTypeEnum } from "../../containers/panes/CurrencyPane/CurrencyPaneConstants"; import { CoinManagerContext } from "../../managers/CoinManagerContext"; import { InventoryManagerContext } from "../../managers/InventoryManagerContext"; import { CustomItemCreator } from "../CustomItemCreator"; import EquipmentShop from "../EquipmentShop"; import ItemDetail from "../ItemDetail"; import { ItemSlotManager } from "../ItemSlotManager"; import { ThemeButtonWithMenu } from "../common/Button"; interface Props { currentContainer: Container; theme: CharacterTheme; onItemMove?: (item: Item, containerDefinitionKey: string) => void; onItemEquip?: (item: Item, uses: number) => void; ruleData: RuleData; proficiencyBonus: number; inventory: Array; containers: Array; shopOpenInitially?: boolean; isReadonly: boolean; partyInfo: PartyInfo | null; inventoryManager: InventoryManager; coinManager: CoinManager; handleCurrencyChangeError: ( currencyName: string, errorType: CurrencyErrorTypeEnum ) => void; handleCurrencyAdjust: ( coin: Partial, multiplier: 1 | -1, containerDefinitionKey: string ) => void; handleAmountSet: ( containerDefinitionKey: string, key: keyof CharacterCurrencyContract, amount: number ) => void; } export const ContainerActionsComponent: React.FC = ({ currentContainer, theme, ruleData, onItemMove, onItemEquip, proficiencyBonus, inventory, containers, shopOpenInitially = false, isReadonly, partyInfo, inventoryManager, coinManager, handleCurrencyAdjust, handleAmountSet, handleCurrencyChangeError, }) => { let showEquipmentShop = true; if ( ContainerUtils.isShared(currentContainer) && partyInfo && CampaignUtils.isSharingStateInactive( CampaignUtils.getSharingState(partyInfo) ) ) { showEquipmentShop = false; } let headerNode: React.ReactNode = ( {`Contents (${inventory.length})`} } callout={
} /> ); return (
{showEquipmentShop && ( )} {coinManager.canUseCointainers() && ( )}
{inventory.map((item, idx) => { const canEquip = inventoryManager.canEquipUnequipItem(item); const key = ItemUtils.getUniqueKey(item); return (
{ if (onItemEquip) { onItemEquip(item, uses); } }} theme={theme} useTooltip={false} />
} callout={ !isReadonly && partyInfo && inventoryManager.canMoveItem(item) ? ( { if (onItemMove) { onItemMove(item, definitionKey); } }} > Move ) : null } /> } >
); })} {ContainerUtils.getItemMappingIds(currentContainer).length === 0 && (
There are no items in your{" "} {ContainerUtils.getName(currentContainer)}
)}
); }; export const ContainerActions = (props) => { const { inventoryManager } = useContext(InventoryManagerContext); const { coinManager } = useContext(CoinManagerContext); return ( ); }; export default ContainerActions;