5180 fichiers 38.5 Mo 0 téléchargements 242 vues mis à jour il y a 5 heures ui
nitro-v36-with-renderer-v36 / src / hooks / catalog / useCatalogProductMetadata.ts
useCatalogProductMetadata.ts 1.8 Ko Télécharger le fichier
import {
    CatalogProductMetadataComposer,
    CatalogProductMetadataEntry,
    CatalogProductMetadataEvent
} from '@octane/renderer';
import { useEffect, useRef, useState } from 'react';
import { SendMessageComposer } from '../../api';
import { useMessageEvent } from '../events';

const METADATA_TIMEOUT_MS = 2500;
let nextRequestId = 0;

export const useCatalogProductMetadata = (pageId: number, catalogMode: string) => {
    const [entries, setEntries] = useState<CatalogProductMetadataEntry[] | null>(null);
    const activeRequestRef = useRef<string | null>(null);

    useMessageEvent<CatalogProductMetadataEvent>(CatalogProductMetadataEvent, (event) => {
        const parser = event.getParser();

        if (
            !activeRequestRef.current ||
            parser.protocolVersion !== 1 ||
            parser.requestId !== activeRequestRef.current ||
            parser.pageId !== pageId
        ) {
            return;
        }

        activeRequestRef.current = null;
        setEntries(parser.entries);
    });

    useEffect(() => {
        setEntries(null);

        if (pageId <= 0) {
            activeRequestRef.current = null;
            return;
        }

        const requestId = `catalog-metadata-${Date.now().toString(36)}-${++nextRequestId}`;
        activeRequestRef.current = requestId;
        SendMessageComposer(new CatalogProductMetadataComposer(requestId, pageId, catalogMode || 'NORMAL'));

        const timeout = setTimeout(() => {
            if (activeRequestRef.current === requestId) activeRequestRef.current = null;
        }, METADATA_TIMEOUT_MS);

        return () => {
            clearTimeout(timeout);
            if (activeRequestRef.current === requestId) activeRequestRef.current = null;
        };
    }, [catalogMode, pageId]);

    return entries;
};
15Sujets
1Dépôts
20Membres
2En ligne
Profile
Inscrit
Dernière visite
Messages
0
Votes positifs
0
Votes négatifs
0

Nous utilisons des cookies pour assurer le bon fonctionnement du site et améliorer votre expérience. en savoir plus

Autoriser