Skip to content

Commit fc910ed

Browse files
m4dm4rtig4nClément VALENTINclaude
authored
fix(web): display selected provider on initial page load (#71)
Initialize cascading selectors with synced state tracking to ensure selected offer displays correctly when navigating to Dashboard with cached offers data. Prevents dropdown from showing 'Sélectionner...' on page load. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Clément VALENTIN <[email protected]> Co-authored-by: Claude <[email protected]>
1 parent 26446cd commit fc910ed

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

apps/web/src/components/OfferSelector.tsx

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,32 @@ export default function OfferSelector({
9595
return allOffers.find(o => o.id === selectedOfferId) || null
9696
}, [selectedOfferId, allOffers])
9797

98-
// Initialize selectors from selected offer
98+
// Initialize/sync selectors from selected offer
99+
// This effect handles two cases:
100+
// 1. Initial mount with a selectedOfferId - wait for offers to load then sync
101+
// 2. selectedOfferId prop changes externally - sync to new offer
102+
// We track which offer we've synced to avoid interfering with manual user selection
103+
const [lastSyncedOfferId, setLastSyncedOfferId] = useState<string | null | undefined>(undefined)
104+
99105
useEffect(() => {
100106
if (selectedOffer) {
101-
setSelectedProviderId(selectedOffer.provider_id)
102-
setSelectedOfferType(selectedOffer.offer_type)
107+
// We have a valid offer - sync the selectors if not already synced to this offer
108+
if (lastSyncedOfferId !== selectedOffer.id) {
109+
setSelectedProviderId(selectedOffer.provider_id)
110+
setSelectedOfferType(selectedOffer.offer_type)
111+
setLastSyncedOfferId(selectedOffer.id)
112+
}
113+
} else if (selectedOfferId === null || selectedOfferId === undefined) {
114+
// Offer was cleared externally - reset selectors
115+
if (lastSyncedOfferId !== null) {
116+
setSelectedProviderId(null)
117+
setSelectedOfferType(null)
118+
setLastSyncedOfferId(null)
119+
}
103120
}
104-
}, [selectedOffer])
121+
// Note: when selectedOfferId is set but selectedOffer is null (offers loading),
122+
// we wait - the effect will re-run when offers finish loading
123+
}, [selectedOffer, selectedOfferId, lastSyncedOfferId])
105124

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

0 commit comments

Comments
 (0)