import { useAtom, useAtomValue, useSetAtom } from 'jotai' import { useEffect } from 'react' import { FaArrowLeft, FaArrowRight } from 'react-icons/fa' import { clearItemSelectionActionAtom, currentCharacterInventoryAtom, filteredCharacterItemsAtom, inventoryPageRangeAtom, itemSelectionSelectAllFilterActionAtom, itemSelectionSelectAllPageActionAtom, moveSelectedItemsAtom, openMoveConfirmationAtom, paginateInventoryActionAtom, preferenceInventorySearch, selectedCharacterAtom, } from '@/state/atoms' import { MoveConfirmationPopup } from './MoveConfirmationPopup' import { InventoryTargetSelector } from './movetarget' import { InventoryTable } from './table' import { InventoryFilters } from './InventoryFilters' const InventoryRangeDisplay = () => { const inventoryRange = useAtomValue(inventoryPageRangeAtom) const items = useAtomValue(filteredCharacterItemsAtom) return (
{inventoryRange.start}..{inventoryRange.end}/{items.length}
) } export const Inventory = () => { const selectedCharacter = useAtomValue(selectedCharacterAtom) const clearItemSelection = useSetAtom(clearItemSelectionActionAtom) const { refetch: refetchInventory } = useAtomValue(currentCharacterInventoryAtom) const addPageItemSelection = useSetAtom(itemSelectionSelectAllPageActionAtom) const addFilterItemSelection = useSetAtom(itemSelectionSelectAllFilterActionAtom) const [search, setSearch] = useAtom(preferenceInventorySearch) const paginateInventory = useSetAtom(paginateInventoryActionAtom) const openMoveConfirmation = useSetAtom(openMoveConfirmationAtom) const moveSelectedItems = useSetAtom(moveSelectedItemsAtom) // Add keyboard navigation useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { // Don't paginate if user is typing in an input if (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) { return } if (e.key === 'ArrowLeft') { e.preventDefault() paginateInventory(-1) } else if (e.key === 'ArrowRight') { e.preventDefault() paginateInventory(1) } } window.addEventListener('keydown', handleKeyDown) return () => { window.removeEventListener('keydown', handleKeyDown) } }, [paginateInventory]) if (!selectedCharacter) { return
select a character
} return (
{ setSearch(e.target.value) }} />
) }