Skip to content

Commit d1fe1db

Browse files
Clément VALENTINclaude
andcommitted
fix(web): resolve race condition in OfferSelector initial load
Add allOffers.length to useEffect dependencies to ensure selectors sync correctly when offers load after component mount. This fixes the issue where providers/offers wouldn't display until page refresh. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent 74e3240 commit d1fe1db

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

apps/web/src/components/OfferSelector.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ export default function OfferSelector({
100100
// 1. Initial mount - wait for offers to load, then sync
101101
// 2. Page navigation (back to Dashboard) - offers reload, sync when ready
102102
// 3. External offer change - sync immediately
103+
//
104+
// IMPORTANT: We include allOffers.length in dependencies to handle race conditions
105+
// where selectedOfferId is set but offers haven't loaded yet. When offers load,
106+
// this effect re-runs and selectedOffer becomes available for sync.
103107
useEffect(() => {
104108
if (selectedOffer) {
105109
// Always sync when selectedOffer is available
@@ -113,7 +117,7 @@ export default function OfferSelector({
113117
}
114118
// When selectedOfferId is set but offers not loaded yet, wait
115119
// The effect re-runs when allOffers populates and selectedOffer becomes non-null
116-
}, [selectedOffer, selectedOfferId])
120+
}, [selectedOffer, selectedOfferId, allOffers.length])
117121

118122
// Reset offer type when provider changes
119123
const handleProviderChange = (providerId: string | null) => {

0 commit comments

Comments
 (0)