GlobalData.Settings.EnableWishlist is enabledReusables\\ProductGridItem\\Default)wishlistUpdated events{
"products": [
{
"id": "Product Id",
"title": "Sample product title",
"link": "product/sample-product",
"mediaItems": [
{
"id": "Media Item Id",
"link": "https://example.com/media/sample.jpg",
"position": 0,
"alt": "sample.jpg",
"mediaType": "Image"
},
"..."
],
"productVariants": [
{
"id": "Variant Id",
"finalPriceText": "Sample price text",
"finalPrice": 10
},
"..."
],
"dimension1": {
"attributeId": "Attribute Id",
"type": "Color"
},
"dimension2": {
"attributeId": "Attribute Id",
"type": "Size"
},
"startPriceText": "Sample price text",
"hasPriceRange": true,
"inWishlist": true
},
"..."
],
"name": "Wishlist",
"view": "Default",
"section": "SectionA",
"settings": {
"id": "Component Id",
"section": "SectionA",
"type": "NoirWishlist",
"name": "Wishlist",
"configuredInContentApi": true,
"view": "Default",
"displayName": "",
"cssClass": ""
},
"translations": {
"wishlist": "Sample text",
"modalTitleText": "Sample text",
"modalMessageText": "Sample text",
"...": "..."
}
}settings.idsettings.cssClassproducts[]pagination (used only by the template):pagination.totalCountpagination.pageNumberpagination.numberOfPagestranslations.*Components/Wishlist/Default.js exposes:<section x-data='wishlistdefault.initComponent({{ productsCount }}, {{ products | serialize | escape }})'>initComponent(productsCount, products)init()list and clears removedIds.wishlistUpdated (same-tab updates)storage for wishlistSync (cross-tab changes)storage event for wishlistSync triggers showReloadWarning = true.handleWishlistUpdated(event)removedIds.hideList = true when all products are removed.redirectToState(newPage = null)pagesortwindow.location.href.clearList(clearListErrorMessage)servicesreusabledefault.clearWishlist().handleClearModal(modalTranslations)clearList(...)$store.wishlist (live wishlist ids)handleWishlistUpdated(...) to check whether an item is still in the wishlist:Alpine.store("wishlist").items.includes(detail.id)$store.modal (confirmation dialog)$store.toast (user feedback)servicesreusabledefault.clearWishlist()Reusables\\ProductGridItem\\Defaultservicesreusabledefault.clearWishlist()wishlistmodaltoastwishlistSync.modalTranslations JSON string in Liquid and passes it into handleClearModal(...).removedIds.includes(product.id).hideList becomes true, it shows the empty-state UI even if the original server products[] was non-empty.