@salla.sa/twilight-components 2.12.51 → 2.12.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/salla-add-product-button_41.cjs.entry.js +22 -12
- package/dist/cjs/salla-add-product-button_41.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-products-list.cjs.entry.js +3 -2
- package/dist/cjs/salla-products-list.cjs.entry.js.map +1 -1
- package/dist/cjs/salla-products-slider.cjs.entry.js +10 -2
- package/dist/cjs/salla-products-slider.cjs.entry.js.map +1 -1
- package/dist/cjs/twilight.cjs.js +1 -1
- package/dist/collection/components/salla-login-modal/salla-login-modal.js +31 -7
- package/dist/collection/components/salla-login-modal/salla-login-modal.js.map +1 -1
- package/dist/collection/components/salla-product-card/salla-product-card.js +2 -5
- package/dist/collection/components/salla-product-card/salla-product-card.js.map +1 -1
- package/dist/collection/components/salla-products-list/salla-products-list.js +24 -2
- package/dist/collection/components/salla-products-list/salla-products-list.js.map +1 -1
- package/dist/collection/components/salla-products-slider/salla-products-slider.js +31 -2
- package/dist/collection/components/salla-products-slider/salla-products-slider.js.map +1 -1
- package/dist/collection/components/salla-quick-buy/salla-quick-buy.js +9 -2
- package/dist/collection/components/salla-quick-buy/salla-quick-buy.js.map +1 -1
- package/dist/components/salla-login-modal.js +12 -5
- package/dist/components/salla-login-modal.js.map +1 -1
- package/dist/components/salla-product-card2.js +2 -5
- package/dist/components/salla-product-card2.js.map +1 -1
- package/dist/components/salla-products-list.js +4 -2
- package/dist/components/salla-products-list.js.map +1 -1
- package/dist/components/salla-products-slider.js +11 -2
- package/dist/components/salla-products-slider.js.map +1 -1
- package/dist/components/salla-quick-buy2.js +9 -2
- package/dist/components/salla-quick-buy2.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/salla-add-product-button_41.entry.js +22 -12
- package/dist/esm/salla-add-product-button_41.entry.js.map +1 -1
- package/dist/esm/salla-products-list.entry.js +3 -2
- package/dist/esm/salla-products-list.entry.js.map +1 -1
- package/dist/esm/salla-products-slider.entry.js +10 -2
- package/dist/esm/salla-products-slider.entry.js.map +1 -1
- package/dist/esm/twilight.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/loader.js.map +1 -1
- package/dist/esm-es5/salla-add-product-button_41.entry.js +1 -1
- package/dist/esm-es5/salla-add-product-button_41.entry.js.map +1 -1
- package/dist/esm-es5/salla-products-list.entry.js +2 -2
- package/dist/esm-es5/salla-products-list.entry.js.map +1 -1
- package/dist/esm-es5/salla-products-slider.entry.js +1 -1
- package/dist/esm-es5/salla-products-slider.entry.js.map +1 -1
- package/dist/esm-es5/twilight.js +1 -1
- package/dist/esm-es5/twilight.js.map +1 -1
- package/dist/twilight/{p-df570f3a.entry.js → p-0057d0ef.entry.js} +2 -2
- package/dist/twilight/p-0057d0ef.entry.js.map +1 -0
- package/dist/twilight/p-5224c881.system.entry.js +5 -0
- package/dist/twilight/p-5224c881.system.entry.js.map +1 -0
- package/dist/twilight/p-7afe6b27.system.js +1 -1
- package/dist/twilight/p-7afe6b27.system.js.map +1 -1
- package/dist/twilight/p-7fda7b65.entry.js +5 -0
- package/dist/twilight/p-7fda7b65.entry.js.map +1 -0
- package/dist/twilight/p-dfe73459.entry.js +5 -0
- package/dist/twilight/p-dfe73459.entry.js.map +1 -0
- package/dist/twilight/p-e5148740.system.entry.js +5 -0
- package/dist/twilight/p-e5148740.system.entry.js.map +1 -0
- package/dist/twilight/{p-2cbb2417.system.entry.js → p-ed5569f5.system.entry.js} +2 -2
- package/dist/twilight/p-ed5569f5.system.entry.js.map +1 -0
- package/dist/twilight/twilight.esm.js +1 -1
- package/dist/twilight/twilight.esm.js.map +1 -1
- package/dist/types/components/salla-login-modal/salla-login-modal.d.ts +5 -1
- package/dist/types/components/salla-products-list/salla-products-list.d.ts +10 -0
- package/dist/types/components/salla-products-slider/salla-products-slider.d.ts +10 -0
- package/dist/types/components/salla-quick-buy/salla-quick-buy.d.ts +1 -0
- package/dist/types/components.d.ts +29 -1
- package/package.json +2 -2
- package/dist/twilight/p-0bffd5bc.entry.js +0 -5
- package/dist/twilight/p-0bffd5bc.entry.js.map +0 -1
- package/dist/twilight/p-2cbb2417.system.entry.js.map +0 -1
- package/dist/twilight/p-6731663d.system.entry.js +0 -5
- package/dist/twilight/p-6731663d.system.entry.js.map +0 -1
- package/dist/twilight/p-780bccea.entry.js +0 -5
- package/dist/twilight/p-780bccea.entry.js.map +0 -1
- package/dist/twilight/p-787eb079.system.entry.js +0 -5
- package/dist/twilight/p-787eb079.system.entry.js.map +0 -1
- package/dist/twilight/p-df570f3a.entry.js.map +0 -1
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Crafted with ❤ by Salla
|
|
3
|
-
*/
|
|
4
|
-
System.register(["./p-548cb28d.system.js","./p-7fbfc1e6.system.js"],(function(e){"use strict";var t,s,r,u,i;return{setters:[function(e){t=e.r;s=e.h;r=e.H;u=e.g},function(e){i=e.H}],execute:function(){var o="";var n=e("salla_products_slider",function(){function e(e){t(this,e);this.blockTitle=undefined;this.subTitle=undefined;this.sliderId=undefined;this.displayAllUrl=undefined;this.autoplay=undefined;this.source=undefined;this.sourceValue=undefined;this.limit=undefined;this.sliderConfig=undefined;this.productsData=undefined;this.isReady=undefined;this.sourceValueIsValid=undefined;this.hasCustomComponent=undefined;this.apiUrl="";this.parsedSourceValue=undefined}e.prototype.isSourceWithoutValue=function(){return["offers","latest","sales"].includes(this.getSource())};e.prototype.getItemHTML=function(e){if(this.hasCustomComponent){return s("div",{class:"s-products-slider-card"},s("custom-salla-product-card",{product:e,source:this.getSource(),"source-value":this.getSourceValue()}))}return s("div",{class:"s-products-slider-card"},s("salla-product-card",{"show-quantity":this.getSource()=="landing-page","hide-add-btn":this.getSource()=="landing-page","shadow-on-hover":true,product:e}))};e.prototype.canRender=function(){return this.sourceValueIsValid&&this.isReady};e.prototype.componentWillLoad=function(){var e=this;return i.onSallaReadyPromise((function(){e.sourceValueIsValid=!!(e.getSourceValue()||e.isSourceWithoutValue());if(!e.sourceValueIsValid){salla.logger.warn("source-value prop is required for source [".concat(e.getSource(),"]"));return}e.hasCustomComponent=!!customElements.get("custom-salla-product-card");if(e.source==="json"){e.productsData=e.getSourceValue();e.isReady=true;return}if(e.getSource()=="related"&&!salla.config.get("store.settings.product.related_products_enabled")){return e.isReady=false}return i.fetchProducts(e.getSource(),e.getSourceValue(),e.limit).then((function(t){e.productsData=t.data;e.isReady=true;salla.event.emit("salla-products-slider::products.fetched",t.data)}))}))};e.prototype.getSource=function(){return i.getProductsSource(this.source)};e.prototype.getSourceValue=function(){return i.getProductsSourceValue(this.source,this.sourceValue)};e.prototype.render=function(){var e=this;var t;if(!this.canRender()){return}return s(r,{class:"s-products-slider-wrapper"},s("salla-slider",{class:"s-products-slider-slider",id:this.sliderId||"s-products-slider-".concat(Math.random().toString(36).substr(2,9)),"auto-play":this.autoplay,type:"carousel","block-title":this.blockTitle,"block-subTitle":this.subTitle,"display-all-url":this.displayAllUrl,sliderConfig:this.sliderConfig?this.sliderConfig:null},s("div",{slot:"items"},(t=this.productsData)===null||t===void 0?void 0:t.map((function(t){return e.getItemHTML(t)})))))};Object.defineProperty(e.prototype,"host",{get:function(){return u(this)},enumerable:false,configurable:true});return e}());n.style=o}}}));
|
|
5
|
-
//# sourceMappingURL=p-6731663d.system.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["sallaProductsSliderCss","SallaProductsSlider","exports","class_1","prototype","isSourceWithoutValue","includes","this","getSource","getItemHTML","product","hasCustomComponent","h","class","source","getSourceValue","canRender","sourceValueIsValid","isReady","componentWillLoad","_this","Helper","onSallaReadyPromise","salla","logger","warn","concat","customElements","get","productsData","config","fetchProducts","limit","then","res","data","event","emit","getProductsSource","getProductsSourceValue","sourceValue","render","Host","id","sliderId","Math","random","toString","substr","autoplay","type","blockTitle","subTitle","displayAllUrl","sliderConfig","slot","_a","map"],"sources":["src/components/salla-products-slider/salla-products-slider.scss?tag=salla-products-slider","src/components/salla-products-slider/salla-products-slider.tsx"],"sourcesContent":[".s-products-slider{\n &-wrapper{\n\n }\n &-slider{\n\n }\n &-card{\n\n }\n}","import { Component, Host, h, Prop, Element, State } from '@stencil/core';\nimport Helper from '../../Helpers/Helper';\n@Component({\n tag: 'salla-products-slider',\n styleUrl: 'salla-products-slider.scss'\n})\n\n//todo:: extends this component from salla-products-list or the opposite\nexport class SallaProductsSlider {\n private isSourceWithoutValue() {\n return ['offers', 'latest', 'sales'].includes(this.getSource());\n }\n\n @Element() host: HTMLElement;\n //todo:: support limit, default =10, make sure that maximum is 32,\n\n /**\n * Title of the block - works only if slider is true\n * @type {string}\n * @default ''\n * */\n @Prop() blockTitle: string;\n\n /**\n * Sub title of the block - works only if slider is true\n * @type {string}\n * @default ''\n * */\n @Prop() subTitle: string;\n\n /**\n * Slider Id, if not provided will be generated automatically\n * @type {string}\n * @default ''\n * */\n @Prop() sliderId: string;\n\n /**\n * Display 'ALL' URL\n * @type {string}\n * @default ''\n * */\n @Prop() displayAllUrl: string;\n\n /**\n * autoplay option for products slider\n */\n @Prop({ mutable: true }) autoplay: boolean\n\n /**\n * Source of the products, if api will get the products from the API, if json will get the products from the products prop\n * @type {string}\n * @default ''\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'tags' | 'selected' | 'offers' | 'landing-page';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop() sourceValue: string;\n\n /**\n * Limit for number of products in the list.\n */\n @Prop({ mutable: true }) limit: number;\n\n /**\n * Slider Configs refer to https://swiperjs.com/swiper-api#parameters and pass the entire config object\n * @example\n * let slider = document.querySelector('salla-slider');\n * slider.sliderConfig = {\n * slidesPerView: 1,\n * spaceBetween : 30,\n * lazy: true,\n * }\n *\n */\n @Prop({ reflect: true }) sliderConfig: any;\n\n\n @State() productsData: any;\n @State() isReady: boolean;\n @State() sourceValueIsValid: boolean;\n @State() hasCustomComponent: boolean;\n @State() apiUrl: string = '';\n @State() parsedSourceValue: any;\n\n private getItemHTML(product) {\n if (this.hasCustomComponent) {\n return <div class=\"s-products-slider-card\">\n <custom-salla-product-card product={product} source={this.getSource()} source-value={this.getSourceValue()} />\n </div>;\n }\n\n return <div class=\"s-products-slider-card\">\n <salla-product-card\n show-quantity={this.getSource() == 'landing-page'}\n hide-add-btn={this.getSource() == 'landing-page'}\n shadow-on-hover={true}\n product={product} />\n </div>;\n }\n\n\n\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n componentWillLoad() {\n return Helper.onSallaReadyPromise(() => {\n this.sourceValueIsValid = !!(this.getSourceValue() || this.isSourceWithoutValue());\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${\n this.getSource()\n }]`);\n return;\n }\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n\n if (this.source === 'json') {\n this.productsData = this.getSourceValue();\n this.isReady = true\n return;\n }\n\n if ((this.getSource() == 'related' && !salla.config.get('store.settings.product.related_products_enabled'))) {\n return this.isReady = false;\n }\n \n return Helper.fetchProducts(this.getSource(), this.getSourceValue(), this.limit).then(res => {\n this.productsData = res.data\n this.isReady = true\n salla.event.emit('salla-products-slider::products.fetched', res.data);\n });\n });\n }\n\n private getSource() {\n return Helper.getProductsSource(this.source);\n }\n\n private getSourceValue() {\n return Helper.getProductsSourceValue(this.source, this.sourceValue);\n }\n\n render() {\n \n if (!this.canRender()) {\n return;\n }\n return (\n <Host class=\"s-products-slider-wrapper\">\n <salla-slider\n class=\"s-products-slider-slider\"\n id={this.sliderId || `s-products-slider-${Math.random().toString(36).substr(2, 9)}`}\n auto-play={this.autoplay}\n type=\"carousel\"\n block-title={this.blockTitle}\n block-subTitle={this.subTitle}\n display-all-url={this.displayAllUrl}\n sliderConfig={this.sliderConfig ? this.sliderConfig : null}\n >\n <div slot=\"items\">\n {this.productsData?.map(product => this.getItemHTML(product))}\n </div>\n </salla-slider>\n </Host>\n );\n }\n\n}\n"],"mappings":";;;wMAAA,IAAMA,EAAyB,G,ICQlBC,EAAmBC,EAAA,mC,4XAoFJ,G,iCAnFlBC,EAAAC,UAAAC,qBAAA,WACN,MAAO,CAAC,SAAU,SAAU,SAASC,SAASC,KAAKC,Y,EAqF7CL,EAAAC,UAAAK,YAAA,SAAYC,GAClB,GAAIH,KAAKI,mBAAoB,CAC3B,OAAOC,EAAA,OAAKC,MAAM,0BAChBD,EAAA,6BAA2BF,QAASA,EAASI,OAAQP,KAAKC,YAAW,eAAgBD,KAAKQ,mB,CAI9F,OAAOH,EAAA,OAAKC,MAAM,0BAChBD,EAAA,sCACiBL,KAAKC,aAAe,eAAc,eACnCD,KAAKC,aAAe,eAAc,kBAC/B,KACjBE,QAASA,I,EAMPP,EAAAC,UAAAY,UAAA,WACN,OAAOT,KAAKU,oBAAsBV,KAAKW,O,EAEzCf,EAAAC,UAAAe,kBAAA,eAAAC,EAAAb,KACI,OAAOc,EAAOC,qBAAoB,WAC9BF,EAAKH,sBAAwBG,EAAKL,kBAAoBK,EAAKf,wBAC3D,IAAKe,EAAKH,mBAAoB,CAC1BM,MAAMC,OAAOC,KAAK,6CAAAC,OACdN,EAAKZ,YACT,MACA,M,CAEJY,EAAKT,qBAAuBgB,eAAeC,IAAI,6BAE/C,GAAIR,EAAKN,SAAW,OAAQ,CACxBM,EAAKS,aAAeT,EAAKL,iBACzBK,EAAKF,QAAU,KACf,M,CAGJ,GAAKE,EAAKZ,aAAe,YAAce,MAAMO,OAAOF,IAAI,mDAAqD,CAC3G,OAAOR,EAAKF,QAAU,K,CAGxB,OAAOG,EAAOU,cAAcX,EAAKZ,YAAaY,EAAKL,iBAAkBK,EAAKY,OAAOC,MAAK,SAAAC,GAClFd,EAAKS,aAAeK,EAAIC,KACxBf,EAAKF,QAAU,KACfK,MAAMa,MAAMC,KAAK,0CAA2CH,EAAIC,K,QAKpEhC,EAAAC,UAAAI,UAAA,WACN,OAAOa,EAAOiB,kBAAkB/B,KAAKO,O,EAG/BX,EAAAC,UAAAW,eAAA,WACN,OAAOM,EAAOkB,uBAAuBhC,KAAKO,OAAQP,KAAKiC,Y,EAGzDrC,EAAAC,UAAAqC,OAAA,eAAArB,EAAAb,K,MAEE,IAAKA,KAAKS,YAAa,CACrB,M,CAEF,OACEJ,EAAC8B,EAAI,CAAC7B,MAAM,6BACVD,EAAA,gBACEC,MAAM,2BACN8B,GAAIpC,KAAKqC,UAAY,qBAAAlB,OAAqBmB,KAAKC,SAASC,SAAS,IAAIC,OAAO,EAAG,IAAI,YACxEzC,KAAK0C,SAChBC,KAAK,WAAU,cACF3C,KAAK4C,WAAU,iBACZ5C,KAAK6C,SAAQ,kBACZ7C,KAAK8C,cACtBC,aAAc/C,KAAK+C,aAAe/C,KAAK+C,aAAe,MAEtD1C,EAAA,OAAK2C,KAAK,UACPC,EAAAjD,KAAKsB,gBAAY,MAAA2B,SAAA,SAAAA,EAAEC,KAAI,SAAA/C,GAAW,OAAAU,EAAKX,YAAYC,EAAjB,M,yHAnKf,I"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Crafted with ❤ by Salla
|
|
3
|
-
*/
|
|
4
|
-
import{r as t,c as s,h as i,H as e,g as r}from"./p-dd9b5ccb.js";import{a as l}from"./p-5a803ecc.js";import{H as n}from"./p-b9de0451.js";const o=`\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>shopping-bag</title>\n<path d="M28 10.667h-4v-2.667c0-4.412-3.588-8-8-8s-8 3.588-8 8v2.667h-4c-0.736 0-1.333 0.596-1.333 1.333v13.333c0 3.676 2.991 6.667 6.667 6.667h13.333c3.676 0 6.667-2.991 6.667-6.667v-13.333c0-0.737-0.597-1.333-1.333-1.333zM10.667 8c0-2.941 2.392-5.333 5.333-5.333s5.333 2.392 5.333 5.333v2.667h-10.667zM26.667 25.333c0 2.205-1.795 4-4 4h-13.333c-2.205 0-4-1.795-4-4v-12h2.667v2.667c0 0.737 0.597 1.333 1.333 1.333s1.333-0.596 1.333-1.333v-2.667h10.667v2.667c0 0.737 0.597 1.333 1.333 1.333s1.333-0.596 1.333-1.333v-2.667h2.667z"></path>\n</svg>\n`;const h="";const a=class{constructor(i){t(this,i);this.productsFetched=s(this,"productsFetched",7);this.source=undefined;this.sourceValue=undefined;this.limit=undefined;this.sortBy=undefined;this.filtersResults=undefined;this.horizontalCards=undefined;this.page=1;this.nextPage=undefined;this.hasInfiniteScroll=undefined;this.hasCustomComponent=undefined;this.sourceValueIsValid=undefined;this.placeholderText=undefined;this.isReady=undefined;this.showPlaceholder=undefined;this.parsedFilters=undefined}connectedCallback(){salla.event.on("salla-filters::changed",(t=>this.setFilters(t)))}async setFilters(t){if(!!t&&JSON.stringify(this.parsedFilters)===JSON.stringify(t)){return}window.scrollTo({top:0,behavior:"smooth"});this.parsedFilters=t;return this.reload()}async reload(){salla.infiniteScroll.destroy(this.infiniteScroll);this.buildNextPageUrl();this.wrapper.innerHTML="";this.init()}isFilterable(){return salla.config.get("store.settings.product.filters")&&this.filtersResults}isSourceWithoutValue(){return["offers","latest","sales"].includes(this.getSource())}animateItems(){l({targets:"salla-products-list salla-product-card",opacity:[0,1],duration:1200,translateY:[20,0],delay:function(t,s){return s*100}})}createStatusDom(){this.status=document.createElement("div");this.status.className="s-infinite-scroll-wrapper";this.status.innerHTML=`<div class="s-infinite-scroll-status">\n <p class="s-infinite-scroll-last infinite-scroll-last s-hidden" >${salla.lang.get("common.elements.end_of_content")}</p>\n <p class="s-infinite-scroll-error infinite-scroll-error s-hidden">${salla.lang.get("common.elements.failed_to_load_more")}</p>\n </div>\n <a href="#" class="s-infinite-scroll-btn s-button-btn">\n <span class="s-button-loader s-button-loader-center s-infinite-scroll-btn-loader" style="display: none"></span>\n </a>`;this.btnLoader=this.status.querySelector(".s-button-loader");salla.lang.onLoaded((()=>{this.status.querySelector(".s-infinite-scroll-last").innerHTML=salla.lang.get("common.elements.end_of_content");this.status.querySelector(".s-infinite-scroll-error").innerHTML=salla.lang.get("common.elements.failed_to_load_more");this.placeholderText=salla.lang.get("pages.categories.no_products")}))}initBaseNextPageUrl(t){this.nextPage=salla.url.api(`products?source=${t}`);if(this.limit){this.nextPage+=`&per_page=${this.limit>32?32:this.limit}`}if(this.sortBy){this.nextPage+=`&sort=${this.sortBy}`}this.nextPage+="&filterable=1";for(const[t,s]of Object.entries(this.parsedFilters||{})){if(["string","number"].includes(typeof s)){this.nextPage+=`&filters[${encodeURIComponent(t)}]=${encodeURIComponent(s)}`}else if(Array.isArray(s)){s.forEach((s=>this.nextPage+=`&filters[${encodeURIComponent(t)}][]=${encodeURIComponent(s)}`))}else if(typeof s==="object"){for(const[i,e]of Object.entries(s)){this.nextPage+=`&filters[${encodeURIComponent(t)}][${encodeURIComponent(i)}]=${encodeURIComponent(e)}`}}}}buildNextPageUrl(){let t=this.getSource();if(t==="json"){return}this.initBaseNextPageUrl(t);if(this.isSourceWithoutValue()){return}if(["search","related","landing-page"].includes(t)){this.nextPage+=`&source_value=${this.getSourceValue()}`;return}try{this.nextPage+=`&source_value[]=${this.getSourceValue().join("&source_value[]=")}`}catch(s){salla.logger.warn(`source-value prop should be array of ids ex source-value="[1,2,3]" for the source [${t}]`);this.sourceValueIsValid=false}}loading(t=true){this.btnLoader.style.display=t?"inherit":"none"}getItemHTML(t){const s=this.hasCustomComponent?"custom-salla-product-card":"salla-product-card";const i=document.createElement(s);i.product=t;this.applyLandingPageStyles(i);this.applyHorizontalCardStyles(i);return i}applyLandingPageStyles(t){if(this.getSource()==="landing-page"&&!this.hasCustomComponent){t.toggleAttribute("hide-add-btn",true);t.classList.add("s-product-card-fit-height")}}applyHorizontalCardStyles(t){if(!this.horizontalCards){return}t.setAttribute("horizontal",true);if(!this.hasCustomComponent){t.setAttribute("shadow-on-hover",true)}}getSource(){return n.getProductsSource(this.source)}getSourceValue(){return n.getProductsSourceValue(this.source,this.sourceValue)}initiateInfiniteScroll(){var t,s,i;if(!this.hasInfiniteScroll){return}this.host.insertAdjacentElement("beforeend",this.status);this.infiniteScroll=salla.infiniteScroll.initiate(this.wrapper,this.wrapper,{path:()=>this.nextPage,history:false,nextPage:this.nextPage,scrollThreshold:100},true);(t=this.infiniteScroll)===null||t===void 0?void 0:t.on("request",(()=>this.loading()));(s=this.infiniteScroll)===null||s===void 0?void 0:s.on("load",(t=>{var s;if(!((s=t.data)===null||s===void 0?void 0:s.length)&&this.infiniteScroll.pageIndex==2){this.showPlaceholder=true;salla.infiniteScroll.destroy(this.infiniteScroll);this.loading(false);return}else{this.showPlaceholder=false}this.infiniteScroll.appendItems(this.handleResponse(t));if(this.infiniteScroll.pageIndex==2){this.animateItems()}}));(i=this.infiniteScroll)===null||i===void 0?void 0:i.on("error",(()=>{this.status.querySelector(".s-infinite-scroll-error").classList.remove("s-hidden");this.loading(false)}));salla.onReady((()=>salla.infiniteScroll.loadNextPage(this.infiniteScroll)))}componentWillLoad(){return n.onSallaReadyPromise((()=>{this.hasCustomComponent=!!customElements.get("custom-salla-product-card");this.sourceValueIsValid=!!(this.getSourceValue()||this.isSourceWithoutValue());this.hasInfiniteScroll=!["json","selected","related","landing-page"].includes(this.getSource())&&!this.limit;try{let t=new URLSearchParams(window.location.search);this.sortBy=this.sortBy||t.get("sort")||t.get("by");let s=t.get("filters");this.parsedFilters=s?JSON.parse(decodeURIComponent(s)):{}}catch(t){salla.logger.warn("failed to get filters from url",t.message)}this.buildNextPageUrl();this.createStatusDom();this.isReady=true;if(!this.sourceValueIsValid){salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);return}if(this.hasInfiniteScroll){return}if(this.getSource()==="json"){if(!this.getSourceValue().length){this.showPlaceholder=true;return}setTimeout((()=>{this.getSourceValue().map((t=>this.wrapper.append(this.getItemHTML(t))))}));return}if(this.getSource()==="selected"&&!this.getSourceValue().length){this.showPlaceholder=true;return}return n.fetchProducts(this.getSource(),this.getSourceValue(),this.limit).then((t=>{if(!t.data.length){this.showPlaceholder=true;this.loading(false);return}setTimeout((()=>{this.handleResponse(t).forEach((t=>this.wrapper.append(t)))}),100)}))}))}canRender(){return this.sourceValueIsValid&&this.isReady}render(){if(!this.canRender()){return""}if(this.showPlaceholder){return i("div",{class:"s-products-list-placeholder"},i("span",{innerHTML:o}),i("p",null,this.placeholderText))}return i(e,{class:"s-products-list"},i("div",{class:{"s-products-list-wrapper":true,"s-products-list-horizontal-cards":this.horizontalCards&&!this.filtersResults,"s-products-list-vertical-cards":!this.horizontalCards&&!this.filtersResults,"s-products-list-filters-results":this.filtersResults},ref:t=>this.wrapper=t}))}componentDidLoad(){this.hasInfiniteScroll&&this.init()}init(){this.initiateInfiniteScroll();this.loading()}handleResponse(t){var s,i,e,r,l,o;let h=this.getSource();let a="";if(((s=t.cursor)===null||s===void 0?void 0:s.current)===1){a=n.getPageTitleForSource(h);try{if(this.getSource()==="search"){a=salla.lang.get("common.elements.search_about",{word:this.getSourceValue()})}else if(!a){let s=this.parsedFilters.category_id||this.getSourceValue()[0];a=((r=(e=(i=t.filters.find((t=>t.key=="category_id")))===null||i===void 0?void 0:i.values)===null||e===void 0?void 0:e.find((t=>t.key==s)))===null||r===void 0?void 0:r.value)||""}a+=(a?" - ":"")+salla.lang.choice("blocks.header.products_count",(l=t.data)===null||l===void 0?void 0:l.length);if(t.data.length===15){a=a.replace(t.data.length,salla.lang.get("common.elements.more_than")+" "+t.data.length)}t.title=a}catch(t){}}salla.event.emit("salla-products-list::products.fetched",t);this.productsFetched.emit(t);if(t.filters&&this.isFilterable()){this.filtersResults=true;salla.event.emit("filters::fetched",{filters:t.filters})}else if(this.isFilterable()){salla.event.emit("filters::hidden")}this.nextPage=t.cursor?t.cursor.next:this.nextPage;this.loading(false);if(this.hasInfiniteScroll&&!this.nextPage){this.infiniteScroll.option({scrollThreshold:false,loadOnScroll:false});this.status.querySelector(".s-infinite-scroll-last").classList.remove("s-hidden")}return((o=t.data)===null||o===void 0?void 0:o.map((t=>this.getItemHTML(t))))||[]}get host(){return r(this)}};a.style=h;export{a as salla_products_list};
|
|
5
|
-
//# sourceMappingURL=p-780bccea.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["sallaProductsListCss","SallaProductsList","connectedCallback","salla","event","on","filters","this","setFilters","JSON","stringify","parsedFilters","window","scrollTo","top","behavior","reload","infiniteScroll","destroy","buildNextPageUrl","wrapper","innerHTML","init","isFilterable","config","get","filtersResults","isSourceWithoutValue","includes","getSource","animateItems","anime","targets","opacity","duration","translateY","delay","_el","i","createStatusDom","status","document","createElement","className","lang","btnLoader","querySelector","onLoaded","placeholderText","initBaseNextPageUrl","source","nextPage","url","api","limit","sortBy","key","value","Object","entries","encodeURIComponent","Array","isArray","forEach","item","k","v","getSourceValue","join","e","logger","warn","sourceValueIsValid","loading","isLoading","style","display","getItemHTML","product","customComponentTag","hasCustomComponent","productCard","applyLandingPageStyles","applyHorizontalCardStyles","toggleAttribute","classList","add","horizontalCards","setAttribute","Helper","getProductsSource","getProductsSourceValue","sourceValue","initiateInfiniteScroll","hasInfiniteScroll","host","insertAdjacentElement","initiate","path","history","scrollThreshold","_a","_b","response","data","length","pageIndex","showPlaceholder","appendItems","handleResponse","_c","remove","onReady","loadNextPage","componentWillLoad","onSallaReadyPromise","customElements","searchParams","URLSearchParams","location","search","parse","decodeURIComponent","message","isReady","setTimeout","map","append","fetchProducts","then","res","card","canRender","render","h","class","ShoppingBag","Host","ref","componentDidLoad","title","cursor","current","getPageTitleForSource","word","catId","category_id","_d","find","filter","values","cat","choice","_e","replace","emit","productsFetched","next","option","loadOnScroll","_f"],"sources":["src/components/salla-products-list/salla-products-list.scss?tag=salla-products-list","src/components/salla-products-list/salla-products-list.tsx"],"sourcesContent":["\n","import { Component, Host, h, Prop, State, Element, Method, Event, EventEmitter } from '@stencil/core';\nimport anime from 'animejs';\nimport ShoppingBag from '../../assets/svg/shopping-bag.svg';\nimport Helper from '../../Helpers/Helper';\n@Component({\n tag: 'salla-products-list',\n styleUrl: 'salla-products-list.scss'\n})\nexport class SallaProductsList {\n connectedCallback() {\n salla.event.on('salla-filters::changed', filters => this.setFilters(filters))\n }\n\n /**\n * Set parsed filters data from URI\n * @param filters\n */\n @Method()\n async setFilters(filters) {\n if (!!filters && JSON.stringify(this.parsedFilters) === JSON.stringify(filters)) {\n return;\n }\n window.scrollTo({ top: 0, behavior: 'smooth' });\n this.parsedFilters = filters;\n return this.reload();\n }\n\n /**\n * Reload the list of products (entire content of the component).\n */\n @Method()\n async reload() {\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.buildNextPageUrl();\n // TODO: this is problematic in testing, for the time being it's been resolved like this\n this.wrapper.innerHTML = '';\n this.init();\n }\n\n\n private status: HTMLDivElement;\n private btnLoader: HTMLAnchorElement;\n @Element() host: HTMLElement;\n private wrapper: any;\n private infiniteScroll: any;\n /**\n * The source of the products list\n * @type {string}\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'search' | 'tags' | 'selected' | 'offers' | 'landing-page' | 'sales';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - keyword when `source` = 'search'\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop({ mutable: true }) sourceValue: any;\n\n /**\n * Limit for number of products in the list.\n */\n @Prop({ mutable: true }) limit: number;\n\n /**\n * Sorting the list of products\n */\n @Prop({ mutable: true }) sortBy?: string | 'ourSuggest' | 'bestSell' | 'topRated' | 'priceFromTopToLow' | 'priceFromLowToTop';\n\n /**\n * should listen to filters events `salla-filters::changed` and re-render\n */\n @Prop({ reflect: true, mutable: true }) filtersResults: boolean;\n\n /**\n * Horizontal cards\n */\n @Prop({ reflect: true }) horizontalCards: boolean\n\n // State\n @State() page: number = 1;\n @State() nextPage: string;\n @State() hasInfiniteScroll: boolean;\n @State() hasCustomComponent: boolean;\n @State() sourceValueIsValid: boolean;\n @State() placeholderText: string;\n @State() isReady: boolean;\n @State() showPlaceholder: boolean;\n @State() parsedFilters: any;\n\n /**\n * Custom event fired when the the products fetched.\n */\n @Event() productsFetched: EventEmitter;\n\n private isFilterable() {\n return salla.config.get('store.settings.product.filters') && this.filtersResults;\n }\n\n private isSourceWithoutValue() {\n return ['offers', 'latest', 'sales'].includes(this.getSource());\n }\n\n private animateItems() {\n anime({\n targets: 'salla-products-list salla-product-card',\n opacity: [0, 1],\n duration: 1200,\n translateY: [20, 0],\n delay: function (_el, i) {\n return i * 100;\n },\n })\n }\n\n private createStatusDom() {\n this.status = document.createElement('div');\n this.status.className = 's-infinite-scroll-wrapper';\n this.status.innerHTML = `<div class=\"s-infinite-scroll-status\">\n <p class=\"s-infinite-scroll-last infinite-scroll-last s-hidden\" >${salla.lang.get('common.elements.end_of_content')}</p>\n <p class=\"s-infinite-scroll-error infinite-scroll-error s-hidden\">${salla.lang.get('common.elements.failed_to_load_more')}</p>\n </div>\n <a href=\"#\" class=\"s-infinite-scroll-btn s-button-btn\">\n <span class=\"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader\" style=\"display: none\"></span>\n </a>`;\n this.btnLoader = this.status.querySelector('.s-button-loader');\n salla.lang.onLoaded(() => {\n this.status.querySelector('.s-infinite-scroll-last').innerHTML = salla.lang.get('common.elements.end_of_content');\n this.status.querySelector('.s-infinite-scroll-error').innerHTML = salla.lang.get('common.elements.failed_to_load_more');\n this.placeholderText = salla.lang.get('pages.categories.no_products');\n });\n }\n\n private initBaseNextPageUrl(source: string) {\n\n this.nextPage = salla.url.api(`products?source=${source}`);\n\n if (this.limit) {\n this.nextPage += `&per_page=${this.limit > 32 ? 32 : this.limit}`;\n }\n if (this.sortBy) {\n this.nextPage += `&sort=${this.sortBy}`;\n }\n // if (!this.isFilterable()) {\n // return this.nextPage;\n // }\n this.nextPage += '&filterable=1';\n for (const [key, value] of Object.entries(this.parsedFilters || {})) {\n if ([\"string\", \"number\"].includes(typeof value)) {\n // @ts-ignore\n this.nextPage += `&filters[${encodeURIComponent(key)}]=${encodeURIComponent(value)}`;\n } else if (Array.isArray(value)) {\n value.forEach(item => this.nextPage += `&filters[${encodeURIComponent(key)}][]=${encodeURIComponent(item)}`);\n } else if (typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n this.nextPage += `&filters[${encodeURIComponent(key)}][${encodeURIComponent(k)}]=${encodeURIComponent(v)}`;\n }\n }\n }\n }\n\n private buildNextPageUrl() {\n let source = this.getSource();\n if (source === 'json') {\n return;\n }\n this.initBaseNextPageUrl(source);\n if (this.isSourceWithoutValue()) {\n return;\n }\n\n if (['search', 'related', 'landing-page'].includes(source)) {\n this.nextPage += `&source_value=${this.getSourceValue()}`;\n return;\n }\n\n try {\n this.nextPage += `&source_value[]=${this.getSourceValue().join('&source_value[]=')}`;\n } catch (e) {\n salla.logger.warn(`source-value prop should be array of ids ex source-value=\"[1,2,3]\" for the source [${source}]`);\n this.sourceValueIsValid = false;\n }\n }\n\n\n private loading(isLoading = true) {\n this.btnLoader.style.display = isLoading ? 'inherit' : 'none';\n }\n\n private getItemHTML(product) {\n const customComponentTag = this.hasCustomComponent ? 'custom-salla-product-card' : 'salla-product-card';\n const productCard = document.createElement(customComponentTag) as HTMLSallaProductCardElement;\n productCard.product = product;\n\n this.applyLandingPageStyles(productCard);\n this.applyHorizontalCardStyles(productCard);\n\n return productCard;\n }\n\n private applyLandingPageStyles(productCard) {\n if (this.getSource() === 'landing-page' && !this.hasCustomComponent) {\n productCard.toggleAttribute('hide-add-btn', true);\n productCard.classList.add('s-product-card-fit-height');\n }\n }\n\n private applyHorizontalCardStyles(productCard) {\n if (!this.horizontalCards) {\n return;\n }\n productCard.setAttribute('horizontal', true);\n if (!this.hasCustomComponent) {\n productCard.setAttribute('shadow-on-hover', true);\n }\n\n }\n\n private getSource() {\n return Helper.getProductsSource(this.source);\n }\n\n private getSourceValue() {\n return Helper.getProductsSourceValue(this.source, this.sourceValue);\n }\n\n private initiateInfiniteScroll() {\n if (!this.hasInfiniteScroll) {\n return;\n }\n\n this.host.insertAdjacentElement('beforeend', this.status);\n this.infiniteScroll = salla.infiniteScroll.initiate(this.wrapper, this.wrapper, {\n path: () => this.nextPage,\n history: false,\n nextPage: this.nextPage,\n scrollThreshold: 100,\n }, /* infinite via api*/true);\n this.infiniteScroll?.on('request', () => this.loading())\n this.infiniteScroll?.on('load', response => {\n if (!response.data?.length && this.infiniteScroll.pageIndex == 2) {\n this.showPlaceholder = true;\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.loading(false);\n return;\n } else {\n this.showPlaceholder = false;\n\n }\n this.infiniteScroll.appendItems(this.handleResponse(response))\n if (this.infiniteScroll.pageIndex == 2) {\n this.animateItems();\n }\n })\n this.infiniteScroll?.on('error', () => {\n this.status.querySelector('.s-infinite-scroll-error').classList.remove('s-hidden')\n this.loading(false);\n });\n salla.onReady(() => salla.infiniteScroll.loadNextPage(this.infiniteScroll))\n }\n\n componentWillLoad() {\n return Helper.onSallaReadyPromise( () => {\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n this.sourceValueIsValid = !!(this.getSourceValue() || this.isSourceWithoutValue());\n this.hasInfiniteScroll = !['json', 'selected', 'related', 'landing-page'].includes(this.getSource()) && !this.limit;\n try {\n let searchParams = new URLSearchParams(window.location.search);\n this.sortBy = this.sortBy || searchParams.get('sort') || searchParams.get('by');\n let filters = searchParams.get('filters')\n this.parsedFilters = filters ? JSON.parse(decodeURIComponent(filters)) : {};\n } catch (e) {\n salla.logger.warn('failed to get filters from url', e.message);\n }\n this.buildNextPageUrl();\n this.createStatusDom();\n\n this.isReady = true;\n\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);\n return;\n }\n if (this.hasInfiniteScroll) {\n return;\n }\n\n // Handle json source\n if (this.getSource() === 'json') {\n if (!this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n setTimeout(() => {\n this.getSourceValue().map(product => this.wrapper.append(this.getItemHTML(product)));\n });\n return;\n }\n\n // Handle selected source\n if (this.getSource() === 'selected' && !this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n\n return Helper.fetchProducts(this.getSource(), this.getSourceValue(), this.limit).then(res => {\n if (!res.data.length) {\n this.showPlaceholder = true;\n this.loading(false);\n return;\n }\n setTimeout(() => {\n this.handleResponse(res).forEach(card => this.wrapper.append(card));\n }, 100);\n });\n });\n }\n\n\n\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n\n render() {\n if (!this.canRender()) {\n return '';\n }\n\n if (this.showPlaceholder) {\n return <div class=\"s-products-list-placeholder\">\n <span innerHTML={ShoppingBag} />\n <p>{this.placeholderText}</p>\n </div>;\n }\n return (\n <Host class=\"s-products-list\">\n <div class={{\n \"s-products-list-wrapper\": true,\n 's-products-list-horizontal-cards': this.horizontalCards && !this.filtersResults,\n 's-products-list-vertical-cards': !this.horizontalCards && !this.filtersResults,\n 's-products-list-filters-results': this.filtersResults,\n }}\n ref={wrapper => this.wrapper = wrapper} />\n </Host>\n );\n }\n\n componentDidLoad() {\n this.hasInfiniteScroll && this.init();\n }\n\n private init() {\n this.initiateInfiniteScroll();\n this.loading();\n }\n\n private handleResponse(response): Array<HTMLElement> {\n let source=this.getSource();\n let title = '';\n //help the developer to know the current page title\n if (response.cursor?.current === 1) {\n title = Helper.getPageTitleForSource(source);\n try {\n if (this.getSource() === 'search') {\n title = salla.lang.get('common.elements.search_about', {'word': this.getSourceValue()});\n } else if (!title) {\n let catId = this.parsedFilters.category_id || this.getSourceValue()[0];\n // get the first filter that its key is category_id, then get the value when filter.value.*.key==catId\n title = response.filters.find(filter => filter.key == 'category_id') ?. values ?. find(cat => cat.key == catId) ?. value || '';\n }\n title += (title ? ' - ' : '') + salla.lang.choice('blocks.header.products_count', response.data ?. length);\n if (response.data.length === 15) {\n title = title.replace(response.data.length, salla.lang.get('common.elements.more_than') + ' ' + response.data.length)\n }\n response.title = title;\n } catch (e) {}\n }\n\n salla.event.emit('salla-products-list::products.fetched', response);\n this.productsFetched.emit(response);\n //💡 when source is related, cursor will not be existed\n if (response.filters && this.isFilterable()) {\n this.filtersResults = true;\n salla.event.emit('filters::fetched', { filters: response.filters });\n } else if (this.isFilterable()) {\n salla.event.emit('filters::hidden');\n }\n this.nextPage = response.cursor ? response.cursor.next : this.nextPage;\n this.loading(false);\n if (this.hasInfiniteScroll && !this.nextPage) {\n this.infiniteScroll.option({ scrollThreshold: false, loadOnScroll: false });\n this.status.querySelector('.s-infinite-scroll-last').classList.remove('s-hidden');\n }\n return response.data?.map(product => this.getItemHTML(product)) || [];\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(e,t,n,i){function r(e){return e instanceof n?e:new n((function(t){t(e)}))}return new(n||(n=Promise))((function(n,o){function s(e){try{l(i.next(e))}catch(e){o(e)}}function a(e){try{l(i["throw"](e))}catch(e){o(e)}}function l(e){e.done?n(e.value):r(e.value).then(s,a)}l((i=i.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var n={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},i,r,o,s;return s={next:a(0),throw:a(1),return:a(2)},typeof Symbol==="function"&&(s[Symbol.iterator]=function(){return this}),s;function a(e){return function(t){return l([e,t])}}function l(a){if(i)throw new TypeError("Generator is already executing.");while(s&&(s=0,a[0]&&(n=0)),n)try{if(i=1,r&&(o=a[0]&2?r["return"]:a[0]?r["throw"]||((o=r["return"])&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;if(r=0,o)a=[a[0]&2,o.value];switch(a[0]){case 0:case 1:o=a;break;case 4:n.label++;return{value:a[1],done:false};case 5:n.label++;r=a[1];a=[0];continue;case 7:a=n.ops.pop();n.trys.pop();continue;default:if(!(o=n.trys,o=o.length>0&&o[o.length-1])&&(a[0]===6||a[0]===2)){n=0;continue}if(a[0]===3&&(!o||a[1]>o[0]&&a[1]<o[3])){n.label=a[1];break}if(a[0]===6&&n.label<o[1]){n.label=o[1];o=a;break}if(o&&n.label<o[2]){n.label=o[2];n.ops.push(a);break}if(o[2])n.ops.pop();n.trys.pop();continue}a=t.call(e,n)}catch(e){a=[6,e];r=0}finally{i=o=0}if(a[0]&5)throw a[1];return{value:a[0]?a[1]:void 0,done:true}}};
|
|
2
|
-
/*!
|
|
3
|
-
* Crafted with ❤ by Salla
|
|
4
|
-
*/System.register(["./p-548cb28d.system.js","./p-8f7b9e36.system.js","./p-7fbfc1e6.system.js"],(function(e){"use strict";var t,n,i,r,o,s,a;return{setters:[function(e){t=e.r;n=e.c;i=e.h;r=e.H;o=e.g},function(e){s=e.a},function(e){a=e.H}],execute:function(){var l='\x3c!-- Generated by IcoMoon.io --\x3e\n<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32">\n<title>shopping-bag</title>\n<path d="M28 10.667h-4v-2.667c0-4.412-3.588-8-8-8s-8 3.588-8 8v2.667h-4c-0.736 0-1.333 0.596-1.333 1.333v13.333c0 3.676 2.991 6.667 6.667 6.667h13.333c3.676 0 6.667-2.991 6.667-6.667v-13.333c0-0.737-0.597-1.333-1.333-1.333zM10.667 8c0-2.941 2.392-5.333 5.333-5.333s5.333 2.392 5.333 5.333v2.667h-10.667zM26.667 25.333c0 2.205-1.795 4-4 4h-13.333c-2.205 0-4-1.795-4-4v-12h2.667v2.667c0 0.737 0.597 1.333 1.333 1.333s1.333-0.596 1.333-1.333v-2.667h10.667v2.667c0 0.737 0.597 1.333 1.333 1.333s1.333-0.596 1.333-1.333v-2.667h2.667z"></path>\n</svg>\n';var c="";var u=e("salla_products_list",function(){function e(e){t(this,e);this.productsFetched=n(this,"productsFetched",7);this.source=undefined;this.sourceValue=undefined;this.limit=undefined;this.sortBy=undefined;this.filtersResults=undefined;this.horizontalCards=undefined;this.page=1;this.nextPage=undefined;this.hasInfiniteScroll=undefined;this.hasCustomComponent=undefined;this.sourceValueIsValid=undefined;this.placeholderText=undefined;this.isReady=undefined;this.showPlaceholder=undefined;this.parsedFilters=undefined}e.prototype.connectedCallback=function(){var e=this;salla.event.on("salla-filters::changed",(function(t){return e.setFilters(t)}))};e.prototype.setFilters=function(e){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(t){if(!!e&&JSON.stringify(this.parsedFilters)===JSON.stringify(e)){return[2]}window.scrollTo({top:0,behavior:"smooth"});this.parsedFilters=e;return[2,this.reload()]}))}))};e.prototype.reload=function(){return __awaiter(this,void 0,void 0,(function(){return __generator(this,(function(e){salla.infiniteScroll.destroy(this.infiniteScroll);this.buildNextPageUrl();this.wrapper.innerHTML="";this.init();return[2]}))}))};e.prototype.isFilterable=function(){return salla.config.get("store.settings.product.filters")&&this.filtersResults};e.prototype.isSourceWithoutValue=function(){return["offers","latest","sales"].includes(this.getSource())};e.prototype.animateItems=function(){s({targets:"salla-products-list salla-product-card",opacity:[0,1],duration:1200,translateY:[20,0],delay:function(e,t){return t*100}})};e.prototype.createStatusDom=function(){var e=this;this.status=document.createElement("div");this.status.className="s-infinite-scroll-wrapper";this.status.innerHTML='<div class="s-infinite-scroll-status">\n <p class="s-infinite-scroll-last infinite-scroll-last s-hidden" >'.concat(salla.lang.get("common.elements.end_of_content"),'</p>\n <p class="s-infinite-scroll-error infinite-scroll-error s-hidden">').concat(salla.lang.get("common.elements.failed_to_load_more"),'</p>\n </div>\n <a href="#" class="s-infinite-scroll-btn s-button-btn">\n <span class="s-button-loader s-button-loader-center s-infinite-scroll-btn-loader" style="display: none"></span>\n </a>');this.btnLoader=this.status.querySelector(".s-button-loader");salla.lang.onLoaded((function(){e.status.querySelector(".s-infinite-scroll-last").innerHTML=salla.lang.get("common.elements.end_of_content");e.status.querySelector(".s-infinite-scroll-error").innerHTML=salla.lang.get("common.elements.failed_to_load_more");e.placeholderText=salla.lang.get("pages.categories.no_products")}))};e.prototype.initBaseNextPageUrl=function(e){var t=this;this.nextPage=salla.url.api("products?source=".concat(e));if(this.limit){this.nextPage+="&per_page=".concat(this.limit>32?32:this.limit)}if(this.sortBy){this.nextPage+="&sort=".concat(this.sortBy)}this.nextPage+="&filterable=1";var n=function(e,n){if(["string","number"].includes(typeof n)){i.nextPage+="&filters[".concat(encodeURIComponent(e),"]=").concat(encodeURIComponent(n))}else if(Array.isArray(n)){n.forEach((function(n){return t.nextPage+="&filters[".concat(encodeURIComponent(e),"][]=").concat(encodeURIComponent(n))}))}else if(typeof n==="object"){for(var r=0,o=Object.entries(n);r<o.length;r++){var s=o[r],a=s[0],l=s[1];i.nextPage+="&filters[".concat(encodeURIComponent(e),"][").concat(encodeURIComponent(a),"]=").concat(encodeURIComponent(l))}}};var i=this;for(var r=0,o=Object.entries(this.parsedFilters||{});r<o.length;r++){var s=o[r],a=s[0],l=s[1];n(a,l)}};e.prototype.buildNextPageUrl=function(){var e=this.getSource();if(e==="json"){return}this.initBaseNextPageUrl(e);if(this.isSourceWithoutValue()){return}if(["search","related","landing-page"].includes(e)){this.nextPage+="&source_value=".concat(this.getSourceValue());return}try{this.nextPage+="&source_value[]=".concat(this.getSourceValue().join("&source_value[]="))}catch(t){salla.logger.warn('source-value prop should be array of ids ex source-value="[1,2,3]" for the source ['.concat(e,"]"));this.sourceValueIsValid=false}};e.prototype.loading=function(e){if(e===void 0){e=true}this.btnLoader.style.display=e?"inherit":"none"};e.prototype.getItemHTML=function(e){var t=this.hasCustomComponent?"custom-salla-product-card":"salla-product-card";var n=document.createElement(t);n.product=e;this.applyLandingPageStyles(n);this.applyHorizontalCardStyles(n);return n};e.prototype.applyLandingPageStyles=function(e){if(this.getSource()==="landing-page"&&!this.hasCustomComponent){e.toggleAttribute("hide-add-btn",true);e.classList.add("s-product-card-fit-height")}};e.prototype.applyHorizontalCardStyles=function(e){if(!this.horizontalCards){return}e.setAttribute("horizontal",true);if(!this.hasCustomComponent){e.setAttribute("shadow-on-hover",true)}};e.prototype.getSource=function(){return a.getProductsSource(this.source)};e.prototype.getSourceValue=function(){return a.getProductsSourceValue(this.source,this.sourceValue)};e.prototype.initiateInfiniteScroll=function(){var e=this;var t,n,i;if(!this.hasInfiniteScroll){return}this.host.insertAdjacentElement("beforeend",this.status);this.infiniteScroll=salla.infiniteScroll.initiate(this.wrapper,this.wrapper,{path:function(){return e.nextPage},history:false,nextPage:this.nextPage,scrollThreshold:100},true);(t=this.infiniteScroll)===null||t===void 0?void 0:t.on("request",(function(){return e.loading()}));(n=this.infiniteScroll)===null||n===void 0?void 0:n.on("load",(function(t){var n;if(!((n=t.data)===null||n===void 0?void 0:n.length)&&e.infiniteScroll.pageIndex==2){e.showPlaceholder=true;salla.infiniteScroll.destroy(e.infiniteScroll);e.loading(false);return}else{e.showPlaceholder=false}e.infiniteScroll.appendItems(e.handleResponse(t));if(e.infiniteScroll.pageIndex==2){e.animateItems()}}));(i=this.infiniteScroll)===null||i===void 0?void 0:i.on("error",(function(){e.status.querySelector(".s-infinite-scroll-error").classList.remove("s-hidden");e.loading(false)}));salla.onReady((function(){return salla.infiniteScroll.loadNextPage(e.infiniteScroll)}))};e.prototype.componentWillLoad=function(){var e=this;return a.onSallaReadyPromise((function(){e.hasCustomComponent=!!customElements.get("custom-salla-product-card");e.sourceValueIsValid=!!(e.getSourceValue()||e.isSourceWithoutValue());e.hasInfiniteScroll=!["json","selected","related","landing-page"].includes(e.getSource())&&!e.limit;try{var t=new URLSearchParams(window.location.search);e.sortBy=e.sortBy||t.get("sort")||t.get("by");var n=t.get("filters");e.parsedFilters=n?JSON.parse(decodeURIComponent(n)):{}}catch(e){salla.logger.warn("failed to get filters from url",e.message)}e.buildNextPageUrl();e.createStatusDom();e.isReady=true;if(!e.sourceValueIsValid){salla.logger.warn("source-value prop is required for source [".concat(e.getSource(),"]"));return}if(e.hasInfiniteScroll){return}if(e.getSource()==="json"){if(!e.getSourceValue().length){e.showPlaceholder=true;return}setTimeout((function(){e.getSourceValue().map((function(t){return e.wrapper.append(e.getItemHTML(t))}))}));return}if(e.getSource()==="selected"&&!e.getSourceValue().length){e.showPlaceholder=true;return}return a.fetchProducts(e.getSource(),e.getSourceValue(),e.limit).then((function(t){if(!t.data.length){e.showPlaceholder=true;e.loading(false);return}setTimeout((function(){e.handleResponse(t).forEach((function(t){return e.wrapper.append(t)}))}),100)}))}))};e.prototype.canRender=function(){return this.sourceValueIsValid&&this.isReady};e.prototype.render=function(){var e=this;if(!this.canRender()){return""}if(this.showPlaceholder){return i("div",{class:"s-products-list-placeholder"},i("span",{innerHTML:l}),i("p",null,this.placeholderText))}return i(r,{class:"s-products-list"},i("div",{class:{"s-products-list-wrapper":true,"s-products-list-horizontal-cards":this.horizontalCards&&!this.filtersResults,"s-products-list-vertical-cards":!this.horizontalCards&&!this.filtersResults,"s-products-list-filters-results":this.filtersResults},ref:function(t){return e.wrapper=t}}))};e.prototype.componentDidLoad=function(){this.hasInfiniteScroll&&this.init()};e.prototype.init=function(){this.initiateInfiniteScroll();this.loading()};e.prototype.handleResponse=function(e){var t=this;var n,i,r,o,s,l;var c=this.getSource();var u="";if(((n=e.cursor)===null||n===void 0?void 0:n.current)===1){u=a.getPageTitleForSource(c);try{if(this.getSource()==="search"){u=salla.lang.get("common.elements.search_about",{word:this.getSourceValue()})}else if(!u){var d=this.parsedFilters.category_id||this.getSourceValue()[0];u=((o=(r=(i=e.filters.find((function(e){return e.key=="category_id"})))===null||i===void 0?void 0:i.values)===null||r===void 0?void 0:r.find((function(e){return e.key==d})))===null||o===void 0?void 0:o.value)||""}u+=(u?" - ":"")+salla.lang.choice("blocks.header.products_count",(s=e.data)===null||s===void 0?void 0:s.length);if(e.data.length===15){u=u.replace(e.data.length,salla.lang.get("common.elements.more_than")+" "+e.data.length)}e.title=u}catch(e){}}salla.event.emit("salla-products-list::products.fetched",e);this.productsFetched.emit(e);if(e.filters&&this.isFilterable()){this.filtersResults=true;salla.event.emit("filters::fetched",{filters:e.filters})}else if(this.isFilterable()){salla.event.emit("filters::hidden")}this.nextPage=e.cursor?e.cursor.next:this.nextPage;this.loading(false);if(this.hasInfiniteScroll&&!this.nextPage){this.infiniteScroll.option({scrollThreshold:false,loadOnScroll:false});this.status.querySelector(".s-infinite-scroll-last").classList.remove("s-hidden")}return((l=e.data)===null||l===void 0?void 0:l.map((function(e){return t.getItemHTML(e)})))||[]};Object.defineProperty(e.prototype,"host",{get:function(){return o(this)},enumerable:false,configurable:true});return e}());u.style=c}}}));
|
|
5
|
-
//# sourceMappingURL=p-787eb079.system.entry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["sallaProductsListCss","SallaProductsList","exports","class_1","prototype","connectedCallback","_this","this","salla","event","on","filters","setFilters","JSON","stringify","parsedFilters","window","scrollTo","top","behavior","reload","infiniteScroll","destroy","buildNextPageUrl","wrapper","innerHTML","init","isFilterable","config","get","filtersResults","isSourceWithoutValue","includes","getSource","animateItems","anime","targets","opacity","duration","translateY","delay","_el","i","createStatusDom","status","document","createElement","className","concat","lang","btnLoader","querySelector","onLoaded","placeholderText","initBaseNextPageUrl","source","nextPage","url","api","limit","sortBy","key","value","this_1","encodeURIComponent","Array","isArray","forEach","item","_j","_k","Object","entries","length","_l","k","v","_i","_g","_h","getSourceValue","join","e","logger","warn","sourceValueIsValid","loading","isLoading","style","display","getItemHTML","product","customComponentTag","hasCustomComponent","productCard","applyLandingPageStyles","applyHorizontalCardStyles","toggleAttribute","classList","add","horizontalCards","setAttribute","Helper","getProductsSource","getProductsSourceValue","sourceValue","initiateInfiniteScroll","hasInfiniteScroll","host","insertAdjacentElement","initiate","path","history","scrollThreshold","_a","_b","response","data","pageIndex","showPlaceholder","appendItems","handleResponse","_c","remove","onReady","loadNextPage","componentWillLoad","onSallaReadyPromise","customElements","searchParams","URLSearchParams","location","search","parse","decodeURIComponent","message","isReady","setTimeout","map","append","fetchProducts","then","res","card","canRender","render","h","class","ShoppingBag","Host","ref","componentDidLoad","title","cursor","current","getPageTitleForSource","word","catId_1","category_id","_d","find","filter","values","cat","choice","_e","replace","emit","productsFetched","next","option","loadOnScroll","_f"],"sources":["src/components/salla-products-list/salla-products-list.scss?tag=salla-products-list","src/components/salla-products-list/salla-products-list.tsx"],"sourcesContent":["\n","import { Component, Host, h, Prop, State, Element, Method, Event, EventEmitter } from '@stencil/core';\nimport anime from 'animejs';\nimport ShoppingBag from '../../assets/svg/shopping-bag.svg';\nimport Helper from '../../Helpers/Helper';\n@Component({\n tag: 'salla-products-list',\n styleUrl: 'salla-products-list.scss'\n})\nexport class SallaProductsList {\n connectedCallback() {\n salla.event.on('salla-filters::changed', filters => this.setFilters(filters))\n }\n\n /**\n * Set parsed filters data from URI\n * @param filters\n */\n @Method()\n async setFilters(filters) {\n if (!!filters && JSON.stringify(this.parsedFilters) === JSON.stringify(filters)) {\n return;\n }\n window.scrollTo({ top: 0, behavior: 'smooth' });\n this.parsedFilters = filters;\n return this.reload();\n }\n\n /**\n * Reload the list of products (entire content of the component).\n */\n @Method()\n async reload() {\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.buildNextPageUrl();\n // TODO: this is problematic in testing, for the time being it's been resolved like this\n this.wrapper.innerHTML = '';\n this.init();\n }\n\n\n private status: HTMLDivElement;\n private btnLoader: HTMLAnchorElement;\n @Element() host: HTMLElement;\n private wrapper: any;\n private infiniteScroll: any;\n /**\n * The source of the products list\n * @type {string}\n * */\n @Prop({\n reflect: true,\n mutable: true\n }) source: 'categories' | 'latest' | 'related' | 'brands' | 'json' | 'search' | 'tags' | 'selected' | 'offers' | 'landing-page' | 'sales';\n\n /**\n * The source value, cloud be different values as following:\n * - array of ids when `source` in ['categories', 'brands', 'tags', 'selected']\n * - keyword when `source` = 'search'\n * - products payload when `source` = 'json'\n * - product_id when `source` = 'related'\n *\n * @type {string}\n * */\n @Prop({ mutable: true }) sourceValue: any;\n\n /**\n * Limit for number of products in the list.\n */\n @Prop({ mutable: true }) limit: number;\n\n /**\n * Sorting the list of products\n */\n @Prop({ mutable: true }) sortBy?: string | 'ourSuggest' | 'bestSell' | 'topRated' | 'priceFromTopToLow' | 'priceFromLowToTop';\n\n /**\n * should listen to filters events `salla-filters::changed` and re-render\n */\n @Prop({ reflect: true, mutable: true }) filtersResults: boolean;\n\n /**\n * Horizontal cards\n */\n @Prop({ reflect: true }) horizontalCards: boolean\n\n // State\n @State() page: number = 1;\n @State() nextPage: string;\n @State() hasInfiniteScroll: boolean;\n @State() hasCustomComponent: boolean;\n @State() sourceValueIsValid: boolean;\n @State() placeholderText: string;\n @State() isReady: boolean;\n @State() showPlaceholder: boolean;\n @State() parsedFilters: any;\n\n /**\n * Custom event fired when the the products fetched.\n */\n @Event() productsFetched: EventEmitter;\n\n private isFilterable() {\n return salla.config.get('store.settings.product.filters') && this.filtersResults;\n }\n\n private isSourceWithoutValue() {\n return ['offers', 'latest', 'sales'].includes(this.getSource());\n }\n\n private animateItems() {\n anime({\n targets: 'salla-products-list salla-product-card',\n opacity: [0, 1],\n duration: 1200,\n translateY: [20, 0],\n delay: function (_el, i) {\n return i * 100;\n },\n })\n }\n\n private createStatusDom() {\n this.status = document.createElement('div');\n this.status.className = 's-infinite-scroll-wrapper';\n this.status.innerHTML = `<div class=\"s-infinite-scroll-status\">\n <p class=\"s-infinite-scroll-last infinite-scroll-last s-hidden\" >${salla.lang.get('common.elements.end_of_content')}</p>\n <p class=\"s-infinite-scroll-error infinite-scroll-error s-hidden\">${salla.lang.get('common.elements.failed_to_load_more')}</p>\n </div>\n <a href=\"#\" class=\"s-infinite-scroll-btn s-button-btn\">\n <span class=\"s-button-loader s-button-loader-center s-infinite-scroll-btn-loader\" style=\"display: none\"></span>\n </a>`;\n this.btnLoader = this.status.querySelector('.s-button-loader');\n salla.lang.onLoaded(() => {\n this.status.querySelector('.s-infinite-scroll-last').innerHTML = salla.lang.get('common.elements.end_of_content');\n this.status.querySelector('.s-infinite-scroll-error').innerHTML = salla.lang.get('common.elements.failed_to_load_more');\n this.placeholderText = salla.lang.get('pages.categories.no_products');\n });\n }\n\n private initBaseNextPageUrl(source: string) {\n\n this.nextPage = salla.url.api(`products?source=${source}`);\n\n if (this.limit) {\n this.nextPage += `&per_page=${this.limit > 32 ? 32 : this.limit}`;\n }\n if (this.sortBy) {\n this.nextPage += `&sort=${this.sortBy}`;\n }\n // if (!this.isFilterable()) {\n // return this.nextPage;\n // }\n this.nextPage += '&filterable=1';\n for (const [key, value] of Object.entries(this.parsedFilters || {})) {\n if ([\"string\", \"number\"].includes(typeof value)) {\n // @ts-ignore\n this.nextPage += `&filters[${encodeURIComponent(key)}]=${encodeURIComponent(value)}`;\n } else if (Array.isArray(value)) {\n value.forEach(item => this.nextPage += `&filters[${encodeURIComponent(key)}][]=${encodeURIComponent(item)}`);\n } else if (typeof value === 'object') {\n for (const [k, v] of Object.entries(value)) {\n this.nextPage += `&filters[${encodeURIComponent(key)}][${encodeURIComponent(k)}]=${encodeURIComponent(v)}`;\n }\n }\n }\n }\n\n private buildNextPageUrl() {\n let source = this.getSource();\n if (source === 'json') {\n return;\n }\n this.initBaseNextPageUrl(source);\n if (this.isSourceWithoutValue()) {\n return;\n }\n\n if (['search', 'related', 'landing-page'].includes(source)) {\n this.nextPage += `&source_value=${this.getSourceValue()}`;\n return;\n }\n\n try {\n this.nextPage += `&source_value[]=${this.getSourceValue().join('&source_value[]=')}`;\n } catch (e) {\n salla.logger.warn(`source-value prop should be array of ids ex source-value=\"[1,2,3]\" for the source [${source}]`);\n this.sourceValueIsValid = false;\n }\n }\n\n\n private loading(isLoading = true) {\n this.btnLoader.style.display = isLoading ? 'inherit' : 'none';\n }\n\n private getItemHTML(product) {\n const customComponentTag = this.hasCustomComponent ? 'custom-salla-product-card' : 'salla-product-card';\n const productCard = document.createElement(customComponentTag) as HTMLSallaProductCardElement;\n productCard.product = product;\n\n this.applyLandingPageStyles(productCard);\n this.applyHorizontalCardStyles(productCard);\n\n return productCard;\n }\n\n private applyLandingPageStyles(productCard) {\n if (this.getSource() === 'landing-page' && !this.hasCustomComponent) {\n productCard.toggleAttribute('hide-add-btn', true);\n productCard.classList.add('s-product-card-fit-height');\n }\n }\n\n private applyHorizontalCardStyles(productCard) {\n if (!this.horizontalCards) {\n return;\n }\n productCard.setAttribute('horizontal', true);\n if (!this.hasCustomComponent) {\n productCard.setAttribute('shadow-on-hover', true);\n }\n\n }\n\n private getSource() {\n return Helper.getProductsSource(this.source);\n }\n\n private getSourceValue() {\n return Helper.getProductsSourceValue(this.source, this.sourceValue);\n }\n\n private initiateInfiniteScroll() {\n if (!this.hasInfiniteScroll) {\n return;\n }\n\n this.host.insertAdjacentElement('beforeend', this.status);\n this.infiniteScroll = salla.infiniteScroll.initiate(this.wrapper, this.wrapper, {\n path: () => this.nextPage,\n history: false,\n nextPage: this.nextPage,\n scrollThreshold: 100,\n }, /* infinite via api*/true);\n this.infiniteScroll?.on('request', () => this.loading())\n this.infiniteScroll?.on('load', response => {\n if (!response.data?.length && this.infiniteScroll.pageIndex == 2) {\n this.showPlaceholder = true;\n salla.infiniteScroll.destroy(this.infiniteScroll);\n this.loading(false);\n return;\n } else {\n this.showPlaceholder = false;\n\n }\n this.infiniteScroll.appendItems(this.handleResponse(response))\n if (this.infiniteScroll.pageIndex == 2) {\n this.animateItems();\n }\n })\n this.infiniteScroll?.on('error', () => {\n this.status.querySelector('.s-infinite-scroll-error').classList.remove('s-hidden')\n this.loading(false);\n });\n salla.onReady(() => salla.infiniteScroll.loadNextPage(this.infiniteScroll))\n }\n\n componentWillLoad() {\n return Helper.onSallaReadyPromise( () => {\n this.hasCustomComponent = !!customElements.get('custom-salla-product-card');\n this.sourceValueIsValid = !!(this.getSourceValue() || this.isSourceWithoutValue());\n this.hasInfiniteScroll = !['json', 'selected', 'related', 'landing-page'].includes(this.getSource()) && !this.limit;\n try {\n let searchParams = new URLSearchParams(window.location.search);\n this.sortBy = this.sortBy || searchParams.get('sort') || searchParams.get('by');\n let filters = searchParams.get('filters')\n this.parsedFilters = filters ? JSON.parse(decodeURIComponent(filters)) : {};\n } catch (e) {\n salla.logger.warn('failed to get filters from url', e.message);\n }\n this.buildNextPageUrl();\n this.createStatusDom();\n\n this.isReady = true;\n\n if (!this.sourceValueIsValid) {\n salla.logger.warn(`source-value prop is required for source [${this.getSource()}]`);\n return;\n }\n if (this.hasInfiniteScroll) {\n return;\n }\n\n // Handle json source\n if (this.getSource() === 'json') {\n if (!this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n setTimeout(() => {\n this.getSourceValue().map(product => this.wrapper.append(this.getItemHTML(product)));\n });\n return;\n }\n\n // Handle selected source\n if (this.getSource() === 'selected' && !this.getSourceValue().length) {\n this.showPlaceholder = true;\n return;\n }\n\n return Helper.fetchProducts(this.getSource(), this.getSourceValue(), this.limit).then(res => {\n if (!res.data.length) {\n this.showPlaceholder = true;\n this.loading(false);\n return;\n }\n setTimeout(() => {\n this.handleResponse(res).forEach(card => this.wrapper.append(card));\n }, 100);\n });\n });\n }\n\n\n\n private canRender() {\n return this.sourceValueIsValid && this.isReady;\n }\n\n render() {\n if (!this.canRender()) {\n return '';\n }\n\n if (this.showPlaceholder) {\n return <div class=\"s-products-list-placeholder\">\n <span innerHTML={ShoppingBag} />\n <p>{this.placeholderText}</p>\n </div>;\n }\n return (\n <Host class=\"s-products-list\">\n <div class={{\n \"s-products-list-wrapper\": true,\n 's-products-list-horizontal-cards': this.horizontalCards && !this.filtersResults,\n 's-products-list-vertical-cards': !this.horizontalCards && !this.filtersResults,\n 's-products-list-filters-results': this.filtersResults,\n }}\n ref={wrapper => this.wrapper = wrapper} />\n </Host>\n );\n }\n\n componentDidLoad() {\n this.hasInfiniteScroll && this.init();\n }\n\n private init() {\n this.initiateInfiniteScroll();\n this.loading();\n }\n\n private handleResponse(response): Array<HTMLElement> {\n let source=this.getSource();\n let title = '';\n //help the developer to know the current page title\n if (response.cursor?.current === 1) {\n title = Helper.getPageTitleForSource(source);\n try {\n if (this.getSource() === 'search') {\n title = salla.lang.get('common.elements.search_about', {'word': this.getSourceValue()});\n } else if (!title) {\n let catId = this.parsedFilters.category_id || this.getSourceValue()[0];\n // get the first filter that its key is category_id, then get the value when filter.value.*.key==catId\n title = response.filters.find(filter => filter.key == 'category_id') ?. values ?. find(cat => cat.key == catId) ?. value || '';\n }\n title += (title ? ' - ' : '') + salla.lang.choice('blocks.header.products_count', response.data ?. length);\n if (response.data.length === 15) {\n title = title.replace(response.data.length, salla.lang.get('common.elements.more_than') + ' ' + response.data.length)\n }\n response.title = title;\n } catch (e) {}\n }\n\n salla.event.emit('salla-products-list::products.fetched', response);\n this.productsFetched.emit(response);\n //💡 when source is related, cursor will not be existed\n if (response.filters && this.isFilterable()) {\n this.filtersResults = true;\n salla.event.emit('filters::fetched', { filters: response.filters });\n } else if (this.isFilterable()) {\n salla.event.emit('filters::hidden');\n }\n this.nextPage = response.cursor ? response.cursor.next : this.nextPage;\n this.loading(false);\n if (this.hasInfiniteScroll && !this.nextPage) {\n this.infiniteScroll.option({ scrollThreshold: false, loadOnScroll: false });\n this.status.querySelector('.s-infinite-scroll-last').classList.remove('s-hidden');\n }\n return response.data?.map(product => this.getItemHTML(product)) || [];\n }\n}\n"],"mappings":"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"}
|