Passa al contenuto principale

@webround/commerce-react

Gli hook che collegano @webround/commerce ai componenti React (React 19 o successivo). Si limitano a collegare: le regole sono nella logica sotto. Non c'è un Provider: un modulo del sito costruisce lo store una volta e i componenti lo importano.

import { commerce } from '@webround/commerce-react/site'; // lo store di questo sito
import { useShop, useAuth, useCart, useCheckout } from '@webround/commerce-react';
HookCosa dà
useResource(resource)Qualsiasi domanda al catalogo, come { status, data, error, isFetching, isStale, retry }.
useShop({ catalog, context })Lo shop: state, actions, storeData, sortOptions, question e results.
useShopAddress({ search, navigate, collectionId?, limit? })Tiene lo stato dello shop nell'indirizzo, con qualsiasi router. Si usa come useShop({ store: useShopAddress(...) }).
useAuth(commerce.auth)state, status, customer, challenge e actions (signup, login, verifyTwoFactor, cancelChallenge, logout).
useCart(commerce)state, count, priced e actions (add, setQuantity, remove, clear, refresh).
useCheckout(commerce)state, quote e actions (le scelte del cliente, quote, pay, reset, complete).
useAccount, useAddressesLe richieste del cliente sul suo account e la sua rubrica.
useOrders, useOrder, useSubscriptions, useSubscriptionCiò che il cliente ha comprato, una pagina alla volta.
useReturnRequests, useReturnRequest, useGuestReturnSession(commerce, token)I resi, per un cliente e per un ospite.
useWishlist(commerce)count, has(variantId) e toggle.
useMyReviews, useReviewAbilityLe recensioni del cliente, e se può scriverne una (login, verify, allowed).

Un elenco​

function Shop() {
const { state, actions, results } = useShop({
catalog: commerce.catalog,
context: { currencyCode: 'EUR', langCode: 'default' },
});

if (results.status === 'error') return <button onClick={results.retry}>Riprova</button>;
return (
<>
{results.data?.data.map((product) => <ProductCard key={product.id} product={product} />)}
<button onClick={() => actions.setPage(state.page + 1)}>Altri</button>
</>
);
}

keepPrevious è attivo di base, quindi l'elenco non si svuota a ogni clic: results.isStale dice che i prodotti mostrati sono quelli di prima.

Il cliente e il carrello​

const { status, customer, actions } = useAuth(commerce.auth);
await actions.login({ email, password }); // lancia ciò che dice lo store: mostralo nel form

const { count, priced, actions: cart } = useCart(commerce);
cart.add({ variantId, priceId, quantity: 1 });

Il primo componente che si monta riprende il cliente (una volta); un render lato server dice unknown e non chiede niente. Un carrello mostra subito le sue righe (count) e il prezzo dello store quando ce l'ha (priced, con state.isStale se è indietro di una modifica).

Pagare​

const { quote, actions } = useCheckout(commerce);

async function pay() {
const { url } = await actions.pay();
location.assign(url); // la pagina di pagamento
}

useCheckout chiede l'anteprima da solo quando cambiano il carrello o le scelte del cliente (autoQuote: false lo spegne); un rifiuto è in state.error, non viene lanciato. Nella pagina di successo chiama actions.complete().