useModalPanels Hook API Reference
File:packages/client/src/hooks/useModalPanels.ts
Added: March 2026 (PR #1067)
Overview
Centralized React hook for subscribing to modal panel events (bank, store, dialogue, smelting, smithing, crafting, fletching, tanning, loot, quests, duels, trades). Provides state management and close handlers for all modal types. Shared between desktop and mobile interfaces.Usage
Basic Usage
API
useModalPanels
Parameters:ModalPanelsState (see Types section)
Types
ModalPanelsState
Panel Data Types
BankData
quantity: 0
StoreData
DialogueData
SmeltingData
SmithingData
CraftingData
FletchingData
TanningData
LootWindowData
QuestStartData
QuestCompleteData
XpLampData
DuelData
DuelResultData
TradeData
Event Handling
World Events
Network Events
Legacy UI_UPDATE Events
The hook handles legacyUI_UPDATE events for backwards compatibility:
Economy Panels:
component: "bank"- Bank state updatescomponent: "store"- Store state updatescomponent: "dialogue"- Dialogue state updatescomponent: "dialogueEnd"- Dialogue endedcomponent: "smelting"- Smelting interface updatescomponent: "smithing"- Smithing interface updatescomponent: "crafting"- Crafting interface updatescomponent: "fletching"- Fletching interface updatescomponent: "tanning"- Tanning interface updates
component: "duel"- Duel interface openedcomponent: "duelRulesUpdate"- Duel rules changedcomponent: "duelEquipmentUpdate"- Equipment restrictions changedcomponent: "duelAcceptanceUpdate"- Acceptance state changedcomponent: "duelStakesUpdate"- Stakes changedcomponent: "duelStateChange"- Screen state changedcomponent: "duelClose"- Duel closedcomponent: "duelCancelled"- Duel cancelledcomponent: "duelCompleted"- Duel completed (shows result screen)
component: "trade"- Trade interface openedcomponent: "tradeUpdate"- Trade offer updatedcomponent: "tradeConfirm"- Trade confirmation screencomponent: "tradeClose"- Trade closed
Close Handlers
All close handlers are memoized withuseCallback for stable references:
Panel-Specific Details
Bank Panel
Features:- RS3-style placeholders (items with
quantity: 0) - Multi-tab support (up to 10 tabs)
- Tab icons (set via right-click menu)
- Always-set-placeholder toggle
- Max 480 slots (expandable)
Store Panel
Features:- Buy/sell items
- Stock quantity tracking
- Buyback rate (default 0.5 = 50% of value)
- Category filtering
- NPC entity tracking
Dialogue Panel
Features:- NPC conversations
- Multiple response options
- Response effects (quest start, shop open, etc.)
- NPC entity tracking for camera focus
Duel Panel
Features:- Three-screen flow: RULES → STAKES → CONFIRMING
- Combat rules (no ranged, no prayer, etc.)
- Equipment restrictions (no weapon, no armor, etc.)
- Stake items with value calculation
- Acceptance tracking for both players
- Opponent stake modification detection
Trade Panel
Features:- Two-screen flow: offer → confirm
- Item offer/remove
- Acceptance tracking
- Value calculation
- Partner free slots tracking
Cleanup
The hook properly cleans up all event listeners on unmount:Benefits
- Centralized State: Single source of truth for all modal panels
- Shared Logic: Used by both
InterfaceManagerandMobileInterfaceManager - Consistent Close Handlers: Memoized callbacks for stable references
- Type Safety: Strongly typed panel data structures
- Backwards Compatibility: Handles legacy
UI_UPDATEevents - Proper Cleanup: All listeners removed on unmount
- Player ID Filtering: Quest/XP lamp events only for local player
Related Hooks
- usePlayerData - Centralized player data subscription (inventory, equipment, stats, coins)
- useMinimapTerrainCache - Minimap terrain rendering
- useMinimapEntityPips - Minimap entity markers
- useMinimapWorldCaches - Minimap road/town caching
See Also
- UI Modernization Guide - Complete UI modernization details
- usePlayerData API - Player data hook reference
- Minimap Hooks API - Minimap hook reference