Like for the search page, we’re layering an SPA on top of your site to enable fast client side routing between the category pages.Set up and configure your product listing pages using the CategoryPage component and a PageReplacer as follows.
tsx
Copy
Ask AI
import { CategoryPage, SetupPageReplacer } from "@depict-ai/js-ui";SetupPageReplacer({ // this should return true for pages that are a category page isPageToReplace: url => url.pathname == "/category.html", // selector of the element that should be replaced with the CategoryPage selectorToReplace: `.replace-for-depict`, renderContent: () => CategoryPage({ categoryProvider, // The categoryProvider instance you created in the previous step productCard, // The productCard component you created in a previous step }), });
Review the types or reference for other configurable properties
The default configuration displays the current category title above the product cards.
If you want to render the title of the category yourself, do the following to remove the default title and also make the CategoryPage as compact as possible:
Navigating to category pages without reloading the page
You can link to the category pages and then PageReplacer will only single-page-navigate between the different category pages.If you, however, want to replace the current page with a category page without a reload, you can do the following:
import { onExistsObserver } from "@depict-ai/js-ui";onExistsObserver("a.category-link", element => element.addEventListener("click", ev => { if (ev.button || ev.metaKey || ev.ctrlKey) return; // Still allow cmd-click to open in new tab const new_id = element.dataset.listingId!; history.pushState({ ...history.state }, "", element.href; // change URL to the product listing page categoryProvider.listingQuery = { type: "listingId", id: new_id }; // change what product listing is being displayed to the new product listing page}));