@bigcommerce/catalyst-core@1.9.0
Minor Changes
-
#3104
25d6471Thanks @parthshahp! - Respect default product search sort and product category sort settings from the control panel. -
#3083
2b7f2ccThanks @jorgemoya! - Display product videos (YouTube) on the PDP in a dedicated section below the primary product content, mirroring the Stencil/Cornerstone layout. The Storefront GraphQL API exposes product videos as a{ title, url }pair (Product.videos); Catalyst now fetches them and renders a featured player with a thumbnail strip (clicking a thumbnail swaps the featured video) usinglite-youtube-embed— a lightweight facade that loads the YouTube player only when a shopper clicks. A smallgetYouTubeId()helper extracts the video id from the watch URL the API returns.Migration
Additive — no breaking changes; existing PDP markup, the image gallery, and image pagination are unchanged. Forks adopting this manually need to:
- add the
lite-youtube-embeddependency; - request
videos(first: 25) { edges { node { title url } } }on the PDP product query (product/[slug]/page-data.ts); - stream those videos and render the new
ProductVideossection belowProductDetail(product/[slug]/page.tsx); - allow
i.ytimg.com/vi/**innext.config.tsimages.remotePatternsfor poster thumbnails.
- add the
-
#3057
a763accThanks @bc-vivekaggarwal! - Wire promotion callouts into PDP and PLP pages using live data from the Storefront GraphQL API (featuredPromotionson theProducttype).- PDP: stacked callout boxes render inline below the price, one per active promotion.
- PLP (category, brand, search): each product card shows its first promotion inline below the price; if there are multiple, a "+N more" label appears within the same callout.
Patch Changes
-
#3076
c6b3b07Thanks @chanceaclark! - Fix Account Settings failing to save for customers when a merchant-defined required custom customer field exists. BigCommerce revalidates required custom fields on everyupdateCustomercall, so Account Settings now renders and resubmits those fields (mirroring the existing Register/Address form-field support) instead of only supporting first name, last name, email, and company. -
#3106
4975333Thanks @jorgemoya! - Disable caching for the webpage sidebar navigation and route/raw-page resolution when a customer access token is present, so customer-only navigation links and pages aren't leaked to (or hidden from) other visitors via a shared cache. -
#3109
8256b46Thanks @jordanarldt! - Keep the cart's locale in sync when a shopper switches their storefront locale. Previously, changing the locale only updated the storefront URL and left the cart on its original locale. The locale switcher now calls the newupdateCartLocaleStorefront GraphQL mutation to update the active cart in place before navigating, mirroring the existing currency-switch behavior. This mutation is currently gated behind a store-side feature flag; until it's enabled,updateCartLocalereturnsnulland the switch is a no-op. -
#3103
d09f8dcThanks @chanceaclark! - Coalesce rapid cart line item quantity and delete clicks into at most one in-flight server action. Quantity buttons now update an optimistic pending intent that flushes a single absolute-quantityupdateintent after a short debounce (replacing the per-clickincrement/decrementintents), and deletes are serialized instead of queueing unboundedly. This prevents the serial server-action queue buildup that could lock up navigation on the cart page, and unifies cart revalidation onrevalidateTag.The cart section is now keyed by cart
entityIdonly (previouslyentityId-version) and renders line items from the revalidation-refreshedcartprop. Remounting on every mutation swallowed clicks landing during the DOM swap and could drop queued actions, leaving the summary skeletons and checkout button stuck in a pending state until hard refresh.Each quantity/delete control is now its own progressive-enhancement form that posts a real absolute quantity or delete request to the server action; JS intercepts the submit to route through the coalescing dispatcher, but the buttons keep working (as full page round-trips) before hydration or if the app bundle fails to load.
Also fixes the checkout button getting stuck spinning forever if its navigation is cancelled (Esc, "Stay" on the leave-page prompt, a flaky connection). The URL-string checkout action previously awaited a promise that never resolved, leaving retry clicks queued behind a dead action; it now settles after a short timeout and on bfcache restore, re-enabling the button as a retry.
-
#3087
cb7d025Thanks @jairo-bc! - Respect the Blog visibility setting (Control Panel > Storefront > Blogs) in the footer navigation. The Blog link no longer appears in the footer's "Navigate" section when Blog visibility is turned off. -
#3101
f60aea6Thanks @bc-svc-local! - Update translations.