mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-20 07:26:19 +00:00
Migrate catalog giftConfiguration to useNitroQuery
The catalog's gift wrapping configuration was loaded by an effect in useCatalog that fired GetGiftWrappingConfigurationComposer every time the catalog opened, with the response stuffed into a catalogOptions slice via setState-in-effect. Migrating to a TanStack query gives us caching/dedup/loading-state for free on this one-shot session-stable loader. - New useGiftConfiguration() hook in src/hooks/catalog/ wraps the composer/parser pair with useNitroQuery and staleTime: Infinity (the wrapping config never changes within a session). - CatalogGiftView now reads from the query directly instead of via catalogOptions; the useCatalog() call in that component is also dropped (no other field was used). - useCatalog drops the GiftWrappingConfigurationEvent listener and the unconditional composer dispatch. - ICatalogOptions loses the giftConfiguration? field — no remaining consumer. First step toward the docs/ARCHITECTURE.md next-PR item 'Migrate useCatalog read-only fetches to useNitroQuery'. The clubGifts loader will follow once useNitroEventInvalidator lands (clubGifts can be push-updated by the server after SelectClubGiftComposer, so it needs cache invalidation, not just a one-shot fetch).
This commit is contained in:
@@ -4,7 +4,7 @@ import { FaChevronLeft, FaChevronRight } from 'react-icons/fa';
|
||||
import { ColorUtils, LocalizeText, MessengerFriend, ProductTypeEnum, SendMessageComposer } from '../../../../api';
|
||||
import { Button, Column, Flex, FormGroup, LayoutCurrencyIcon, LayoutFurniImageView, LayoutGiftTagView, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../../common';
|
||||
import { CatalogEvent, CatalogInitGiftEvent, CatalogPurchasedEvent } from '../../../../events';
|
||||
import { useCatalog, useFriends, useMessageEvent, useUiEvent } from '../../../../hooks';
|
||||
import { useFriends, useGiftConfiguration, useMessageEvent, useUiEvent } from '../../../../hooks';
|
||||
import { classNames } from '../../../../layout';
|
||||
|
||||
let isBuyingGift = false;
|
||||
@@ -25,9 +25,8 @@ export const CatalogGiftView: FC<{}> = props =>
|
||||
const [ maxBoxIndex, setMaxBoxIndex ] = useState<number>(0);
|
||||
const [ maxRibbonIndex, setMaxRibbonIndex ] = useState<number>(0);
|
||||
const [ receiverNotFound, setReceiverNotFound ] = useState<boolean>(false);
|
||||
const { catalogOptions = null } = useCatalog();
|
||||
const { friends } = useFriends();
|
||||
const { giftConfiguration = null } = catalogOptions;
|
||||
const { data: giftConfiguration = null } = useGiftConfiguration();
|
||||
const [ boxTypes, setBoxTypes ] = useState<number[]>([]);
|
||||
const [ suggestions, setSuggestions ] = useState([]);
|
||||
const [ isAutocompleteVisible, setIsAutocompleteVisible ] = useState(true);
|
||||
|
||||
Reference in New Issue
Block a user