ng-easycommerce-v18 0.2.10 → 0.2.11

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.
@@ -6056,12 +6056,26 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
6056
6056
  * Datos del bloque que contiene a los banners
6057
6057
  */
6058
6058
  meta;
6059
+ // =================== PERSONALIZACIÓN DE NAVEGACIÓN ===================
6060
+ /**
6061
+ * Personalización de las flechas de navegación
6062
+ * Por defecto usa símbolos de texto, pero se pueden especificar imágenes
6063
+ */
6064
+ prevArrowImage; // undefined = usa símbolo de texto
6065
+ nextArrowImage; // undefined = usa símbolo de texto
6066
+ prevArrowText = '<';
6067
+ nextArrowText = '>';
6068
+ /**
6069
+ * Opción para habilitar/deshabilitar la navegación personalizada
6070
+ */
6071
+ enableCustomNavigation = true;
6072
+ // ====================================================================
6059
6073
  /**
6060
6074
  * Servicio para Analytics
6061
6075
  */
6062
6076
  analyticsService = inject(AnalyticsService);
6063
6077
  /**
6064
- * Signal utlizado para guarda el contenedor del carrusel
6078
+ * Signal utilizado para guardar el contenedor del carrusel
6065
6079
  */
6066
6080
  swiperElement = signal(null);
6067
6081
  /**
@@ -6070,19 +6084,21 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
6070
6084
  * @returns
6071
6085
  */
6072
6086
  getImage = (banner) => this.getBannerImage(banner);
6087
+ document;
6088
+ platformId = inject(PLATFORM_ID);
6073
6089
  /**
6074
6090
  * Se mappea los banners para sumarle el objeto de translations y que
6075
6091
  * sean mas amigables para su uso.
6076
6092
  */
6077
6093
  ngOnInit() {
6078
- this.banners = this.banners.map((banner) => { return { ...banner, ...banner.translations[this.apiConsts.LOCALE] }; });
6094
+ this.banners = this.banners.map((banner) => {
6095
+ return { ...banner, ...banner.translations[this.apiConsts.LOCALE] };
6096
+ });
6079
6097
  }
6080
- document;
6081
- platformId = inject(PLATFORM_ID);
6082
6098
  /**
6083
- * Ejecuta el método `afterNextRender`para cargar las configuraciones necesarias
6084
- * para el carrusel del banners. Esto debe ser asi debido a que ya debe estar presente
6085
- * en el Dom el element `<swiper-container>` para poder configurarlo.
6099
+ * Ejecuta el método `afterNextRender` para cargar las configuraciones necesarias
6100
+ * para el carrusel de banners. Esto debe ser así debido a que ya debe estar presente
6101
+ * en el DOM el elemento `<swiper-container>` para poder configurarlo.
6086
6102
  */
6087
6103
  constructor() {
6088
6104
  super();
@@ -6090,21 +6106,130 @@ class BlockBannerFullEcComponent extends BlockEcComponent {
6090
6106
  this.document = document;
6091
6107
  }
6092
6108
  afterNextRender(() => {
6093
- const swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code);
6109
+ this.initializeSwiperWithNavigation();
6110
+ });
6111
+ }
6112
+ /**
6113
+ * Inicializa el Swiper con navegación personalizada
6114
+ */
6115
+ initializeSwiperWithNavigation() {
6116
+ const swiperElemConstructor = this.document?.querySelector('#' + this.meta?.code);
6117
+ if (swiperElemConstructor) {
6118
+ // Configurar el Swiper con las opciones base
6094
6119
  Object.assign(swiperElemConstructor, this.swiperOptions());
6095
6120
  this.swiperElement.set(swiperElemConstructor);
6096
6121
  this.swiperElement()?.initialize();
6122
+ // Configurar navegación personalizada si está habilitada
6123
+ if (this.enableCustomNavigation) {
6124
+ setTimeout(() => {
6125
+ this.setupCustomNavigation();
6126
+ }, 200);
6127
+ }
6128
+ }
6129
+ }
6130
+ /**
6131
+ * Configura la navegación personalizada del Swiper para banners
6132
+ */
6133
+ setupCustomNavigation() {
6134
+ const prevButton = this.document?.getElementById(`${this.meta?.code}-prev`);
6135
+ const nextButton = this.document?.getElementById(`${this.meta?.code}-next`);
6136
+ const swiperElement = this.document?.getElementById(this.meta?.code);
6137
+ if (prevButton && nextButton && swiperElement) {
6138
+ console.log('Configurando navegación personalizada para banners:', this.meta?.code);
6139
+ // Actualizar configuración del Swiper existente
6140
+ this.updateSwiperForBanners(swiperElement);
6141
+ // Configurar los event listeners para los botones
6142
+ this.setupBannerNavigationEventListeners(prevButton, nextButton, swiperElement);
6143
+ console.log('Event listeners configurados para navegación de banners');
6144
+ }
6145
+ else {
6146
+ console.log('No se pudieron encontrar los elementos de navegación para banners:', {
6147
+ prevButton: !!prevButton,
6148
+ nextButton: !!nextButton,
6149
+ swiperElement: !!swiperElement
6150
+ });
6151
+ }
6152
+ }
6153
+ /**
6154
+ * Actualiza la configuración del Swiper específicamente para banners
6155
+ */
6156
+ updateSwiperForBanners(swiperElement) {
6157
+ if (swiperElement.swiper) {
6158
+ console.log('Actualizando configuración de Swiper para banners');
6159
+ // Configuración específica para banners
6160
+ swiperElement.swiper.params.slidesPerGroup = 1;
6161
+ swiperElement.swiper.allowSlideNext = true;
6162
+ swiperElement.swiper.allowSlidePrev = true;
6163
+ // Actualizar también los breakpoints si existen
6164
+ if (swiperElement.swiper.params.breakpoints) {
6165
+ Object.keys(swiperElement.swiper.params.breakpoints).forEach(key => {
6166
+ swiperElement.swiper.params.breakpoints[key].slidesPerGroup = 1;
6167
+ });
6168
+ }
6169
+ swiperElement.swiper.update();
6170
+ }
6171
+ }
6172
+ /**
6173
+ * Configura los event listeners para los botones de navegación de banners
6174
+ */
6175
+ setupBannerNavigationEventListeners(prevButton, nextButton, swiperElement) {
6176
+ // Remover event listeners existentes para evitar duplicados
6177
+ const prevClone = prevButton.cloneNode(true);
6178
+ const nextClone = nextButton.cloneNode(true);
6179
+ prevButton.parentNode?.replaceChild(prevClone, prevButton);
6180
+ nextButton.parentNode?.replaceChild(nextClone, nextButton);
6181
+ // Agregar nuevos event listeners
6182
+ prevClone.addEventListener('click', (e) => {
6183
+ e.preventDefault();
6184
+ e.stopPropagation();
6185
+ console.log('Click en botón anterior (banners)');
6186
+ if (swiperElement.swiper) {
6187
+ swiperElement.swiper.slidePrev();
6188
+ }
6189
+ });
6190
+ nextClone.addEventListener('click', (e) => {
6191
+ e.preventDefault();
6192
+ e.stopPropagation();
6193
+ console.log('Click en botón siguiente (banners)');
6194
+ if (swiperElement.swiper) {
6195
+ swiperElement.swiper.slideNext();
6196
+ }
6097
6197
  });
6098
6198
  }
6099
6199
  /**
6100
- * Aplica el evento `select_promotion` junto con el banner que interactua.
6200
+ * Aplica el evento `select_promotion` junto con el banner que interactúa.
6101
6201
  * @param banner
6102
6202
  */
6103
6203
  selectPromotion(banner) {
6104
6204
  this.analyticsService.callEvent('select_promotion', banner);
6105
6205
  }
6206
+ /**
6207
+ * Obtiene la configuración específica del Swiper para banners
6208
+ * Sobrescribe la configuración base si es necesario
6209
+ */
6210
+ getBannerSwiperConfiguration() {
6211
+ return {
6212
+ slidesPerView: 1,
6213
+ spaceBetween: 0,
6214
+ slidesPerGroup: 1,
6215
+ navigation: false, // Deshabilitamos la navegación por defecto
6216
+ pagination: {
6217
+ el: '.swiper-pagination',
6218
+ clickable: true,
6219
+ },
6220
+ loop: true,
6221
+ autoplay: {
6222
+ delay: 5000,
6223
+ disableOnInteraction: false,
6224
+ },
6225
+ effect: 'fade',
6226
+ fadeEffect: {
6227
+ crossFade: true
6228
+ }
6229
+ };
6230
+ }
6106
6231
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlockBannerFullEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
6107
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlockBannerFullEcComponent, isStandalone: true, selector: "app-block-banner-full-ec", inputs: { banners: "banners", meta: "meta" }, usesInheritance: true, ngImport: i0, template: "@if(banners.length > 0) {\r\n <section [ngClass]=\"trimClassBlock(meta?.code)+' container-fluid px-0'\"\r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n @if (banners.length == 1) {\r\n <!-- si es formato fijo -->\r\n <div class=\"row justify-content-center\">\r\n @let banner = banners[0];\r\n @if(!banners.styles?.button?.text){\r\n <!-- banner sin boton -->\r\n <a [href]=\"banner.url\" >\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#fff' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </a>\r\n }@else {\r\n <!-- banner fijo con boton -->\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p \r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\"\r\n [class]=\"'item-button-full btn btn-light '\">\r\n {{banner.styles.button.text}}\r\n </a> \r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <!-- si es carrousel -->\r\n <!-- @if(swiperElement() != null){ -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <swiper-slide>\r\n <div class=\"item\">\r\n @if (!banner.styles?.button?.text) {\r\n <!-- banner sin boton -->\r\n @if(banner.url){\r\n <a [href]=\"banner.url\" class=\"\">\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n </a>\r\n }@else {\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n }\r\n }@else {\r\n <!-- banner con boton -->\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button-full btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </swiper-slide>\r\n }\r\n </swiper-container>\r\n <!-- } -->\r\n \r\n }\r\n </section>\r\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
6232
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlockBannerFullEcComponent, isStandalone: true, selector: "app-block-banner-full-ec", inputs: { banners: "banners", meta: "meta", prevArrowImage: "prevArrowImage", nextArrowImage: "nextArrowImage", prevArrowText: "prevArrowText", nextArrowText: "nextArrowText", enableCustomNavigation: "enableCustomNavigation" }, usesInheritance: true, ngImport: i0, template: "@if(banners.length > 0) {\r\n <section [ngClass]=\"trimClassBlock(meta?.code)+' container-fluid px-0'\"\r\n [style.background-color]=\"meta.styles?.backgroundColor\"\r\n [style.background-image]=\"meta.styles?.backgroundImage ? 'url(' + mediaUrl + meta.styles?.backgroundImage +')' : 'inherit'\">\r\n\r\n @if (banners.length == 1) {\r\n <!-- si es formato fijo -->\r\n <div class=\"row justify-content-center\">\r\n @let banner = banners[0];\r\n @if(!banners.styles?.button?.text){\r\n <!-- banner sin boton -->\r\n <a [href]=\"banner.url\" >\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#fff' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n </div>\r\n </div>\r\n </a>\r\n }@else {\r\n <!-- banner fijo con boton -->\r\n <div class=\"item col-12\">\r\n <img class=\"img-fluid\" [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\">\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-' + (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p \r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\"\r\n [class]=\"'item-button-full btn btn-light '\">\r\n {{banner.styles.button.text}}\r\n </a> \r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }@else {\r\n <!-- si es carrousel -->\r\n <!-- @if(swiperElement() != null){ -->\r\n <swiper-container init=\"false\" [id]=\"meta?.code\">\r\n @for (banner of banners; track $index) {\r\n <swiper-slide>\r\n <div class=\"item\">\r\n @if (!banner.styles?.button?.text) {\r\n <!-- banner sin boton -->\r\n @if(banner.url){\r\n <a [href]=\"banner.url\" class=\"\">\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n </a>\r\n }@else {\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" class=\"img-fluid w-100\" />\r\n }\r\n }@else {\r\n <!-- banner con boton -->\r\n <img [src]=\"mediaBannerUrl + getImage(banner)\" alt=\"\" />\r\n <div class=\"position-absolute w-100 h-100 start-0 top-0\">\r\n @if(banner.title){\r\n <h2 [class]=\"'item-title-full px-2 item-position-vertical-'+ (banner.styles?.description?.position)\"\r\n [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \">\r\n {{banner.title}}\r\n </h2>\r\n }\r\n @if(banner.subtitle){\r\n <p [style.color]=\"(banner.styles?.description?.color) ? banner.styles?.description?.color : '#000' \"\r\n [class]=\"'px-4 item-subtitle-full item-position-vertical-' + (banner.styles?.description?.position)\">\r\n {{banner.subtitle}}\r\n </p>\r\n }\r\n <div [class]=\"'item-position-vertical-' + (banner.styles?.button?.position)\">\r\n @if(banner.styles?.button?.text){\r\n <a href=\"{{banner.url}}\" [class]=\"'item-button-full btn btn-light'\">\r\n {{banner.styles.button.text}}\r\n </a>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </swiper-slide>\r\n }\r\n </swiper-container>\r\n <!-- } -->\r\n \r\n }\r\n </section>\r\n}", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
6108
6233
  }
6109
6234
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlockBannerFullEcComponent, decorators: [{
6110
6235
  type: Component,
@@ -6117,6 +6242,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
6117
6242
  }], meta: [{
6118
6243
  type: Input,
6119
6244
  args: [{ required: true }]
6245
+ }], prevArrowImage: [{
6246
+ type: Input
6247
+ }], nextArrowImage: [{
6248
+ type: Input
6249
+ }], prevArrowText: [{
6250
+ type: Input
6251
+ }], nextArrowText: [{
6252
+ type: Input
6253
+ }], enableCustomNavigation: [{
6254
+ type: Input
6120
6255
  }] } });
6121
6256
 
6122
6257
  register$1();
@@ -7210,7 +7345,7 @@ class BlocksEcComponent {
7210
7345
  }
7211
7346
  }
7212
7347
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlocksEcComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7213
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlocksEcComponent, isStandalone: true, selector: "app-blocks-ec", inputs: { templates: "templates", show_loading: "show_loading", section: "section", blockFilters: "blockFilters" }, ngImport: i0, template: "@if(blocks$ | async; as blocks){\r\n @if(blocks.length > 0){\r\n <div class=\"container-fluid px-0\">\r\n <div class=\"row\">\r\n @for (block of blocks; track $index) {\r\n @switch (block.contentType) {\r\n @case ('banner') {\r\n @switch(block.design){\r\n @case ('full') {\r\n <app-block-banner-full-ec [banners]=\"block.banners\" [meta]=\"block\" />\r\n }\r\n @case ('boxes') {\r\n <app-block-banner-box-ec [banners]=\"block.banners\" [meta]=\"block\"/>\r\n }\r\n }\r\n }\r\n @case ('html') {\r\n @if(showBlock(block)){\r\n <app-block-html-ec [html_content]=\"getHTMLContent(block)\" />\r\n }\r\n }\r\n @case ('products') {\r\n <app-block-products-ec [products]=\"block.products?.items\" [meta]=\"block\" />\r\n }\r\n @case ('contact_form') {\r\n @if(isNewsletter(block)){\r\n <app-block-newsletter-ec [block]=\"block.contactForm\" />\r\n } @else {\r\n <app-block-form-contact-ec [block]=\"block.contactForm\" />\r\n }\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n}", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BlockBannerFullEcComponent, selector: "app-block-banner-full-ec", inputs: ["banners", "meta"] }, { kind: "component", type: BlockBannerBoxEcComponent, selector: "app-block-banner-box-ec", inputs: ["banners", "meta"] }, { kind: "component", type: BlockHtmlEcComponent, selector: "app-block-html-ec", inputs: ["html_content"] }, { kind: "component", type: BlockProductsEcComponent, selector: "app-block-products-ec", inputs: ["prevArrowImage", "nextArrowImage", "prevArrowText", "nextArrowText", "appProduct", "products", "meta"] }, { kind: "component", type: BlockNewsletterEcComponent, selector: "app-block-newsletter-ec", inputs: ["block", "success_message", "subject"] }, { kind: "component", type: BlockFormContactEcComponent, selector: "app-block-form-contact-ec", inputs: ["block", "success_message", "redirect", "subject"] }] });
7348
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: BlocksEcComponent, isStandalone: true, selector: "app-blocks-ec", inputs: { templates: "templates", show_loading: "show_loading", section: "section", blockFilters: "blockFilters" }, ngImport: i0, template: "@if(blocks$ | async; as blocks){\r\n @if(blocks.length > 0){\r\n <div class=\"container-fluid px-0\">\r\n <div class=\"row\">\r\n @for (block of blocks; track $index) {\r\n @switch (block.contentType) {\r\n @case ('banner') {\r\n @switch(block.design){\r\n @case ('full') {\r\n <app-block-banner-full-ec [banners]=\"block.banners\" [meta]=\"block\" />\r\n }\r\n @case ('boxes') {\r\n <app-block-banner-box-ec [banners]=\"block.banners\" [meta]=\"block\"/>\r\n }\r\n }\r\n }\r\n @case ('html') {\r\n @if(showBlock(block)){\r\n <app-block-html-ec [html_content]=\"getHTMLContent(block)\" />\r\n }\r\n }\r\n @case ('products') {\r\n <app-block-products-ec [products]=\"block.products?.items\" [meta]=\"block\" />\r\n }\r\n @case ('contact_form') {\r\n @if(isNewsletter(block)){\r\n <app-block-newsletter-ec [block]=\"block.contactForm\" />\r\n } @else {\r\n <app-block-form-contact-ec [block]=\"block.contactForm\" />\r\n }\r\n }\r\n }\r\n }\r\n </div>\r\n </div>\r\n }\r\n}", styles: [""], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "component", type: BlockBannerFullEcComponent, selector: "app-block-banner-full-ec", inputs: ["banners", "meta", "prevArrowImage", "nextArrowImage", "prevArrowText", "nextArrowText", "enableCustomNavigation"] }, { kind: "component", type: BlockBannerBoxEcComponent, selector: "app-block-banner-box-ec", inputs: ["banners", "meta"] }, { kind: "component", type: BlockHtmlEcComponent, selector: "app-block-html-ec", inputs: ["html_content"] }, { kind: "component", type: BlockProductsEcComponent, selector: "app-block-products-ec", inputs: ["prevArrowImage", "nextArrowImage", "prevArrowText", "nextArrowText", "appProduct", "products", "meta"] }, { kind: "component", type: BlockNewsletterEcComponent, selector: "app-block-newsletter-ec", inputs: ["block", "success_message", "subject"] }, { kind: "component", type: BlockFormContactEcComponent, selector: "app-block-form-contact-ec", inputs: ["block", "success_message", "redirect", "subject"] }] });
7214
7349
  }
7215
7350
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BlocksEcComponent, decorators: [{
7216
7351
  type: Component,