mirror of
https://github.com/jcreek/LivingDexTracker.git
synced 2026-09-16 10:32:10 +00:00
perf(pokedex): send the box grid as packed rows with the page
The server load fetched a full combined-data page at a 9999 item page size, carrying detail text and ownership fields the grid never renders, and the client re-fetched the same payload after hydration. Load a trimmed grid row instead and pack it as positional tuples so field names are not repeated for every one of a thousand-plus entries. Entry detail is fetched on demand from the new per-entry endpoint when a cell is opened, and the grid marks itself interactive so other page-start work can queue behind it.
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { packGrid, unpackGrid, type PokedexGridRow } from '$lib/models/PokedexGridRow';
|
||||
describe('grid transport', () => {
|
||||
it('round-trips missing catches and every flag combination', () => {
|
||||
const rows: PokedexGridRow[] = Array.from({ length: 17 }, (_, flags) => ({
|
||||
pokedexEntry: {
|
||||
_id: String(flags),
|
||||
pokedexNumber: 25,
|
||||
pokemon: 'Pikachu',
|
||||
form: 'Female',
|
||||
spriteKey: '25',
|
||||
canGigantamax: true
|
||||
},
|
||||
catchRecord:
|
||||
flags === 16
|
||||
? null
|
||||
: {
|
||||
_id: `catch-${flags}`,
|
||||
caught: !!(flags & 1),
|
||||
haveToEvolve: !!(flags & 2),
|
||||
inHome: !!(flags & 4),
|
||||
hasGigantamaxed: !!(flags & 8)
|
||||
}
|
||||
}));
|
||||
expect(unpackGrid(packGrid(rows))).toEqual(rows);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user