- declinePhantomClaim and getPendingPhantomClaims adapter methods
- useDeclinePhantomClaim mutation
- pendingPhantomClaims query
- crew field on PhantomPlayer type
- rename route folders from [id] to [granblueId]
- update all server load functions to use params.granblueId
- update detail/edit/new pages to navigate with granblueId
- update cross-entity links (recruits, recruitedBy)
- update TanStack Query keys to use granblueId
backend's IdResolvable already supports fetching by granblueId
- fix Select reactivity with external value changes
- add series/promotions to taxonomy sections
- add onDataChange callbacks to uncap sections
- add game CDN image helpers for batch imports
- expand suggestion type definitions
- correct api paths for username/email availability checks
- use singleton userAdapter instead of creating new instance
- use getApiBaseUrl() for signup to include /api/v1 prefix
- edit join date dialog
- add phantom with join date
- dropdown menus for member actions
- disable scout when roster full (30)
- invalidate gw queries on join date change
- CollectionArtifactCard for grid view
- CollectionArtifactRow for list view
- CollectionArtifactPane for sidebar details
- artifacts collection page with filters and infinite scroll
- getArtifactImage util
- update collection layout for artifacts tab
The addWeapons/addSummons methods were using Promise.all with Array.fill()
which created arrays where all elements referenced the same object. This
caused the request deduplication logic in BaseAdapter to cancel previous
requests since they all had the same body/requestId.
Fix:
- Use Array.from() with spread to create unique object instances
- Execute requests sequentially to avoid deduplication conflicts
- Improve error handling in AddToCollectionModal to filter CancelledErrors
Types, adapter, queries, and mutations for managing user collections
(characters, weapons, summons, job accessories). Supports both private
collection management and public collection viewing with privacy.