fix: apply objectLimit globally across all object buckets after filtering#218
Open
colorbank wants to merge 1 commit into
Open
fix: apply objectLimit globally across all object buckets after filtering#218colorbank wants to merge 1 commit into
colorbank wants to merge 1 commit into
Conversation
…ring
Previously objectLimit was applied per-type bucket separately (via
slice(-objectLimit)), meaning objectLimit={3} could still render up to
3*8=24 objects across all buckets.
This fix:
- Renames filterAndLimit to filterOnly (filter only, no per-type limit)
- Adds applyObjectLimit helper that distributes a global cap across all
buckets from the last bucket backwards
- Adds limitedBuckets useMemo that applies the global limit once
- Updates totalPreLimitObjects to count pre-limit filtered objects
- Updates isLimitReached to compare totalPreLimitObjects vs objectLimit
- Updates JSX to render from limitedXxx instead of filteredXxx
Fixes tscircuit#42
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #42
/claim #42
Problem
objectLimitwas applied per-type bucket separately (viaslice(-objectLimit)) insidefilterAndLimit. With 8 object types,objectLimit={3}could still render up to3 × 8 = 24objects. ThetotalFilteredObjectscount and the red warning were also computed from already-limited buckets, so they never correctly reflected the pre-limit total.Reproduces on the existing fixture
examples/interactive-object-limit-layer-and-step-filtering.fixture.tsx: withobjectLimit={3}and 7 objects (3 rects + 3 points + 1 circle), all 7 rendered while the warning showed"Display limited to 3 objects. Received: 7."— wrong count too.Changes
filterAndLimit→filterOnly: removes per-typeslice(-objectLimit), now just filters without cappingsite/utils/applyObjectLimit.ts: pure helper that distributes a single global budget across all object buckets from the last bucket backwards (preserving last-N semantics)limitedBucketsuseMemo: appliesapplyObjectLimitonce across all 8 filtered arrays after filteringtotalPreLimitObjects: correctly counts pre-limit filtered objects for the red warningisLimitReached: comparestotalPreLimitObjects > objectLimitso the warning accurately reflects when rendering is truncatedlimitedXxxarrays instead offilteredXxxTests
New
tests/apply-object-limit.test.tswith 7 focused unit tests:Verification