import { Component, useEffect, useState, type ErrorInfo, type ReactNode } from 'react'; import { useInventorySearch } from './useInventorySearch'; import { FilterSidebar } from './FilterSidebar'; import { ActiveChips } from './ActiveChips'; import { ResultsTable } from './ResultsTable'; import { DetailPanel } from './DetailPanel'; import type { InvItem } from './types'; /** Composite key used to re-match a selected item across refetches (objects are recreated each fetch). */ function itemKey(i: InvItem): string { return `${i.name} ${i.character_name} ${i.last_updated ?? ''}`; } class InventorySearchErrorBoundary extends Component<{ children: ReactNode }, { hasError: boolean }> { constructor(props: { children: ReactNode }) { super(props); this.state = { hasError: false }; } static getDerivedStateFromError(): { hasError: boolean } { return { hasError: true }; } componentDidCatch(error: Error, info: ErrorInfo): void { console.error('Inventory search crashed:', error, info); } render(): ReactNode { if (this.state.hasError) { return (
Something went wrong loading the inventory search page.