StatsHub Docs

Prop Screener

Filters props by league, market, odds, hit rate and bookmaker — and the bug where the fetch wrote the URL instead of reading it.

/prop-screener/[view] · src/composed/prop-screener

The general screener. League picker, board query, watchlist — the same three parts as the 100 Club, with the filter set opened all the way up.

The bug only this board had

fetchProps called setCurrentPage(page) from inside the request. So the URL was written by the fetch rather than the fetch being keyed off the URL: the address and the data could disagree for the length of a round trip, and a failed request left the page number pointing at a page nobody was on.

It is now keyed off the URL in one direction only — the page number is an input to the key, never an output of the response.

The general rule

A response may not write the address bar. If the URL is the input to a key, then anything the response sets is a second source of truth for the same fact, and the two disagree exactly when a request is slow or fails — which is when a reader is already confused.

Filters

Every one of them is in src/components/filters/propscreener-filter.tsx, which is the complete set and what FullToolFilters mounts. See Conventions for why a filter reachable only from the top bar is a bug.

On this page