ng-easycommerce-v18 0.2.1 → 0.2.3

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.
Files changed (44) hide show
  1. package/README.md +2 -24
  2. package/assets/ec-i18n/ct.json +2 -1
  3. package/assets/ec-i18n/en.json +2 -1
  4. package/assets/ec-i18n/es.json +1 -0
  5. package/assets/ec-i18n/fr.json +2 -1
  6. package/assets/ec-i18n/gl.json +2 -1
  7. package/assets/ec-i18n/pr.json +2 -1
  8. package/esm2022/lib/classes/filters/filter-factory.mjs +4 -1
  9. package/esm2022/lib/classes/filters/price_range-filter.mjs +59 -0
  10. package/esm2022/lib/ec-components/auth-ec/login-form-ec/login-form-ec.component.mjs +3 -3
  11. package/esm2022/lib/ec-components/blocks-ec/block-products-ec/block-products-ec.component.mjs +3 -2
  12. package/esm2022/lib/ec-components/cart-ec/cart-ec.component.mjs +9 -1
  13. package/esm2022/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.mjs +24 -3
  14. package/esm2022/lib/ec-components/collection-ec/collection-ec.component.mjs +1 -5
  15. package/esm2022/lib/ec-components/coupon-ec/coupon-ec.component.mjs +3 -3
  16. package/esm2022/lib/ec-components/filters-ec/filters-ec.component.mjs +38 -91
  17. package/esm2022/lib/ec-components/index.mjs +2 -1
  18. package/esm2022/lib/ec-components/price-range-filter/price-range-filter.component.mjs +143 -0
  19. package/esm2022/lib/ec-components/product-detail-ec/product-detail-ec.component.mjs +39 -3
  20. package/esm2022/lib/ec-components/product-ec/product-ec.component.mjs +16 -2
  21. package/esm2022/lib/ec-components/widgets-ec/price-ec/price-ec.component.mjs +73 -10
  22. package/esm2022/lib/ec-services/filters.service.mjs +45 -12
  23. package/esm2022/lib/ec-services/pagination.service.mjs +8 -7
  24. package/esm2022/lib/ec-services/product-detail.service.mjs +62 -35
  25. package/esm2022/lib/ec-services/products.service.mjs +18 -4
  26. package/esm2022/lib/interfaces/filter.mjs +1 -1
  27. package/esm2022/lib/interfaces/pagination.mjs +1 -1
  28. package/fesm2022/ng-easycommerce-v18.mjs +516 -166
  29. package/fesm2022/ng-easycommerce-v18.mjs.map +1 -1
  30. package/lib/classes/filters/price_range-filter.d.ts +26 -0
  31. package/lib/ec-components/cart-ec/cart-ec.component.d.ts +1 -0
  32. package/lib/ec-components/checkout-ec/dataform-ec/dataform-ec.component.d.ts +1 -0
  33. package/lib/ec-components/filters-ec/filters-ec.component.d.ts +7 -22
  34. package/lib/ec-components/index.d.ts +1 -0
  35. package/lib/ec-components/price-range-filter/price-range-filter.component.d.ts +37 -0
  36. package/lib/ec-components/product-detail-ec/product-detail-ec.component.d.ts +4 -0
  37. package/lib/ec-components/product-ec/product-ec.component.d.ts +1 -0
  38. package/lib/ec-components/widgets-ec/price-ec/price-ec.component.d.ts +30 -10
  39. package/lib/ec-services/filters.service.d.ts +6 -1
  40. package/lib/ec-services/product-detail.service.d.ts +4 -4
  41. package/lib/ec-services/products.service.d.ts +1 -0
  42. package/lib/interfaces/filter.d.ts +1 -1
  43. package/lib/interfaces/pagination.d.ts +2 -0
  44. package/package.json +1 -1
@@ -0,0 +1,26 @@
1
+ import { Filter } from "./filter";
2
+ import { FilterType } from "../../interfaces/filter";
3
+ export declare class PriceRangeFilter extends Filter {
4
+ private _loaded;
5
+ minPrice: number;
6
+ maxPrice: number;
7
+ currentMinPrice: number | null;
8
+ currentMaxPrice: number | null;
9
+ type: () => FilterType;
10
+ /** true cuando ya tengo un rango real */
11
+ get isLoaded(): boolean;
12
+ setContent: (options: {
13
+ minPrice?: number;
14
+ maxPrice?: number;
15
+ currentMinPrice?: number;
16
+ currentMaxPrice?: number;
17
+ }) => void;
18
+ updatePrices(min: number, max: number): void;
19
+ setSelected: (min: number, max: number) => void;
20
+ getSelectedRange: () => {
21
+ min: number;
22
+ max: number;
23
+ };
24
+ toUrlParams: () => string;
25
+ reset: () => void;
26
+ }
@@ -20,6 +20,7 @@ export declare class CartEcComponent {
20
20
  redirectCheckout(): boolean;
21
21
  getMinimumPurchaseAmount: () => any;
22
22
  exceedsMinimumAmount: (value: number) => boolean;
23
+ returnBooleanMinimumAmount: (value: number) => boolean;
23
24
  static ɵfac: i0.ɵɵFactoryDeclaration<CartEcComponent, never>;
24
25
  static ɵcmp: i0.ɵɵComponentDeclaration<CartEcComponent, "lib-cart-ec", never, {}, {}, never, never, true, never>;
25
26
  }
@@ -48,6 +48,7 @@ export declare class DataformEcComponent implements OnInit {
48
48
  validado: boolean;
49
49
  constructor();
50
50
  ngOnInit(): void;
51
+ setDefaultCountry(country: any, isBilling?: boolean): void;
51
52
  isAuthenticated(): boolean;
52
53
  getMode(): boolean;
53
54
  setMode(mode: string): void;
@@ -1,6 +1,6 @@
1
- import { ElementRef } from '@angular/core';
2
1
  import { Filter } from '../../classes';
3
2
  import { FilterElement, FilterType } from '../../interfaces';
3
+ import { PriceRangeFilter } from '../../classes/filters/price_range-filter';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class FiltersEcComponent {
6
6
  private _filtersService;
@@ -10,35 +10,20 @@ export declare class FiltersEcComponent {
10
10
  filters: Filter[];
11
11
  filter$: import("rxjs").Observable<Filter[]>;
12
12
  setSelect: any;
13
- rangeMinRef: ElementRef;
14
- rangeMaxRef: ElementRef;
15
- priceGapPercentage: number;
13
+ ngOnInit(): void;
16
14
  constructor();
15
+ /** 1) Para cuando me piden 'price_range', devuelvo PriceRangeFilter */
16
+ getSpecificFilter(type: 'price_range'): PriceRangeFilter | null;
17
+ /** 2) Para cualquier otro FilterType, devuelvo Filter */
17
18
  getSpecificFilter(type: FilterType): Filter | null;
18
19
  onSelect(event: any, filter: FilterElement[] | null): void;
19
20
  setSelected(filter: Filter | null, selected: FilterElement | null): void;
20
- /**
21
- * Redondea al múltiplo de 'step' respetando el redondeo entero:
22
- * - Mínimo: redondea hacia abajo.
23
- * - Máximo: redondea hacia arriba.
24
- */
25
- onRangeChange(event: Event, type: 'min' | 'max', filter: {
26
- minPrice: number;
27
- maxPrice: number;
28
- currentMinPrice?: number;
29
- currentMaxPrice?: number;
30
- }): void;
31
- roundToNearest(value: number, step: number, type: 'min' | 'max', filter: any): number;
32
21
  uniqueSelection(filter: {
33
22
  data: any[];
34
23
  }, filterChild: any): void;
35
- /**
36
- * Actualiza los valores del filtro permitiendo que un input empuje al otro.
37
- */
38
- updateFilterPrices(type: 'min' | 'max', value: number, filter: any, priceGap: number): void;
39
- calculateLeftPercentage(currentMinPrice: number, minPrice: number, maxPrice: number): number;
40
- calculateRightPercentage(currentMaxPrice: number, minPrice: number, maxPrice: number): number;
24
+ close: () => boolean;
41
25
  scrollUp: () => boolean;
26
+ hasAppliedFilters(): boolean;
42
27
  static ɵfac: i0.ɵɵFactoryDeclaration<FiltersEcComponent, never>;
43
28
  static ɵcmp: i0.ɵɵComponentDeclaration<FiltersEcComponent, "lib-filters-ec", never, { "setSelect": { "alias": "setSelect"; "required": false; }; }, {}, never, never, true, never>;
44
29
  }
@@ -31,3 +31,4 @@ export * from './reviews-ec/reviews-ec.component';
31
31
  export * from './reviews-form-ec/reviews-form-ec.component';
32
32
  export * from './section-container-ec/section-container-ec.component';
33
33
  export * from './stores-ec/stores-ec.component';
34
+ export * from './price-range-filter/price-range-filter.component';
@@ -0,0 +1,37 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { PriceRangeFilter } from '../../classes/filters/price_range-filter';
3
+ import * as i0 from "@angular/core";
4
+ export declare class PriceRangeFilterComponent {
5
+ private _filtersService;
6
+ priceGap: number;
7
+ roundStep: number;
8
+ filter: PriceRangeFilter;
9
+ rangeChanged: EventEmitter<{
10
+ min: number;
11
+ max: number;
12
+ }>;
13
+ getSliderStyle(filter: any): {
14
+ [klass: string]: string;
15
+ };
16
+ calculateLeftPercentage(filter: any): number;
17
+ calculateRightPercentage(filter: any): number;
18
+ updatePriceRange(filter: any): void;
19
+ getMinValue(filter: any): number;
20
+ getMaxValue(filter: any): number;
21
+ /**
22
+ * Redondea al múltiplo de 'step' respetando el redondeo entero:
23
+ * - Mínimo: redondea hacia abajo.
24
+ * - Máximo: redondea hacia arriba.
25
+ */
26
+ onRangeChange(event: Event, type: 'min' | 'max', filter: any): void;
27
+ protected roundToNearest(value: number, step: number, type: 'min' | 'max', filter: any): number;
28
+ /**
29
+ * Actualiza los valores del filtro permitiendo que un input empuje al otro.
30
+ */
31
+ protected updateFilterPrices(type: 'min' | 'max', value: number, filter: any, priceGap: number): void;
32
+ scrollUp: () => boolean;
33
+ getFormattedMinPrice(filter: any): string;
34
+ getFormattedMaxPrice(filter: any): string;
35
+ static ɵfac: i0.ɵɵFactoryDeclaration<PriceRangeFilterComponent, never>;
36
+ static ɵcmp: i0.ɵɵComponentDeclaration<PriceRangeFilterComponent, "lib-price-range-filter", never, { "filter": { "alias": "filter"; "required": false; }; }, { "rangeChanged": "rangeChanged"; }, never, never, true, never>;
37
+ }
@@ -30,9 +30,11 @@ export declare class ProductDetailEcComponent {
30
30
  success: boolean;
31
31
  categories: any[];
32
32
  quantity: WritableSignal<number>;
33
+ isAddingToCart: WritableSignal<boolean>;
33
34
  parameters$: Observable<Parameter[] | null>;
34
35
  hasParams: (params: any, code: string) => any;
35
36
  creditAccountShowPrices: boolean | null;
37
+ private productSignal;
36
38
  constructor();
37
39
  ngOnInit(): void;
38
40
  updateMetaTags(product: Product): void;
@@ -44,6 +46,8 @@ export declare class ProductDetailEcComponent {
44
46
  checkStock(stock: number): void;
45
47
  goToSection(section: string): void;
46
48
  resetForm: () => void;
49
+ hasDiscount: import("@angular/core").Signal<boolean>;
50
+ discountPercentage: import("@angular/core").Signal<number | null>;
47
51
  static ɵfac: i0.ɵɵFactoryDeclaration<ProductDetailEcComponent, never>;
48
52
  static ɵcmp: i0.ɵɵComponentDeclaration<ProductDetailEcComponent, "app-product-detail-ec", never, {}, {}, never, never, true, never>;
49
53
  }
@@ -30,6 +30,7 @@ export declare class ProductEcComponent implements OnInit {
30
30
  openWhatsApp(url: string): void;
31
31
  get shouldShowPrice(): boolean;
32
32
  get hasDiscount(): boolean;
33
+ get discountPercentage(): number | null;
33
34
  static ɵfac: i0.ɵɵFactoryDeclaration<ProductEcComponent, never>;
34
35
  static ɵcmp: i0.ɵɵComponentDeclaration<ProductEcComponent, "app-product-ec", never, { "product": { "alias": "product"; "required": true; }; "isProductBox": { "alias": "isProductBox"; "required": false; }; "isCollection": { "alias": "isCollection"; "required": false; }; }, { "loaded": "loaded"; }, never, never, true, never>;
35
36
  }
@@ -1,16 +1,36 @@
1
+ import { OnInit, TemplateRef } from '@angular/core';
1
2
  import * as i0 from "@angular/core";
2
3
  /**
3
4
  * Componente para manejar la vista del precio de un producto.
4
5
  */
5
- export declare class PriceEcComponent {
6
- /**
7
- * Precio de un producto.
8
- */
9
- price: any;
10
- /**
11
- * Precio de venta de un producto.
12
- */
13
- saleprice: any;
6
+ export declare class PriceEcComponent implements OnInit {
7
+ price: string;
8
+ saleprice?: string;
9
+ basePrice?: string;
10
+ taxeAmount?: number;
11
+ taxes: {
12
+ Name: string;
13
+ taxeAmount: number;
14
+ };
15
+ priceSize: boolean;
16
+ showTaxLegendOnly: boolean;
17
+ disableTaxInfo: boolean;
18
+ customPriceTemplate: TemplateRef<any> | null;
19
+ customSalePriceTemplate: TemplateRef<any> | null;
20
+ customSimplePriceTemplate: TemplateRef<any> | null;
21
+ customSimpleSalePriceTemplate: TemplateRef<any> | null;
22
+ customTaxTemplate: TemplateRef<any> | null;
23
+ customOnlyTaxLabelTemplate: TemplateRef<any> | null;
24
+ private _channelService;
25
+ showTaxLegend: boolean;
26
+ hideTaxes: boolean;
27
+ ngOnInit(): void;
28
+ /** Determina si mostrar la sección de impuestos */
29
+ get shouldShowTaxes(): boolean;
30
+ /** Clase CSS base según tamaño */
31
+ get priceClass(): string;
32
+ /** Helper para detectar rangos */
33
+ hasRange(value?: string): boolean;
14
34
  static ɵfac: i0.ɵɵFactoryDeclaration<PriceEcComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<PriceEcComponent, "app-price-ec", never, { "price": { "alias": "price"; "required": false; }; "saleprice": { "alias": "saleprice"; "required": false; }; }, {}, never, never, true, never>;
35
+ static ɵcmp: i0.ɵɵComponentDeclaration<PriceEcComponent, "app-price-ec", never, { "price": { "alias": "price"; "required": false; }; "saleprice": { "alias": "saleprice"; "required": false; }; "basePrice": { "alias": "basePrice"; "required": false; }; "taxeAmount": { "alias": "taxeAmount"; "required": false; }; "taxes": { "alias": "taxes"; "required": false; }; "priceSize": { "alias": "priceSize"; "required": false; }; "showTaxLegendOnly": { "alias": "showTaxLegendOnly"; "required": false; }; "disableTaxInfo": { "alias": "disableTaxInfo"; "required": false; }; "customPriceTemplate": { "alias": "customPriceTemplate"; "required": false; }; "customSalePriceTemplate": { "alias": "customSalePriceTemplate"; "required": false; }; "customSimplePriceTemplate": { "alias": "customSimplePriceTemplate"; "required": false; }; "customSimpleSalePriceTemplate": { "alias": "customSimpleSalePriceTemplate"; "required": false; }; "customTaxTemplate": { "alias": "customTaxTemplate"; "required": false; }; "customOnlyTaxLabelTemplate": { "alias": "customOnlyTaxLabelTemplate"; "required": false; }; }, {}, never, never, true, never>;
16
36
  }
@@ -1,6 +1,6 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { Filter } from '../classes';
3
- import { FilterElement, FilterType, PaginationSettings } from '../interfaces';
3
+ import { FilterElement, PaginationSettings, FilterType } from '../interfaces';
4
4
  import * as i0 from "@angular/core";
5
5
  export declare class FiltersService {
6
6
  private _apiConsts;
@@ -35,6 +35,11 @@ export declare class FiltersService {
35
35
  getSpecificFilters(types: FilterType[]): Filter[];
36
36
  setFilterSelected(filterObj: Filter, filterElem: FilterElement): void;
37
37
  updateFilters(paginationFilters: any): void;
38
+ /**
39
+ * Actualiza internamente el rango de precio y re-emite
40
+ * el array de filtros para que PaginationService vuelva a llamar
41
+ */
42
+ updatePriceRangeFilter(min: number, max: number): void;
38
43
  static ɵfac: i0.ɵɵFactoryDeclaration<FiltersService, never>;
39
44
  static ɵprov: i0.ɵɵInjectableDeclaration<FiltersService>;
40
45
  }
@@ -36,10 +36,10 @@ export declare class ProductDetailService {
36
36
  */
37
37
  setOption(optionCode: any, optionValue: any): void;
38
38
  /**
39
- * Actualiza el observable de `associatedData` el cual se utiliza para mostrar los datos
40
- * en el frontend segun el producto y/o variante elegida.
41
- * Obtiene los datos de la variante y los formatea.
42
- */
39
+ * Actualiza el observable de `associatedData` el cual se utiliza para mostrar los datos
40
+ * en el frontend según el producto y/o variante elegida.
41
+ * Obtiene los datos de la variante y los formatea.
42
+ */
43
43
  generateAssociatedDataFromVariants(): void;
44
44
  /**
45
45
  * Mejora los datos de las `properties`.
@@ -15,6 +15,7 @@ export declare class ProductsService {
15
15
  filters$: Observable<Filter[]>;
16
16
  private searchValue;
17
17
  constructor();
18
+ private updatePriceRangeFilter;
18
19
  private _shopApiUrl;
19
20
  productByCodeApi(code: string, variant: boolean): string;
20
21
  saveProductReviewsApi(code: string): string;
@@ -1,4 +1,4 @@
1
- export type FilterType = 'categories' | 'attributes' | 'sort' | 'dynamics' | 'all';
1
+ export type FilterType = 'categories' | 'attributes' | 'sort' | 'dynamics' | 'price_range' | 'all';
2
2
  export type ElementType = 'sub' | 'child' | 'range';
3
3
  export type FilterShape = 'color' | 'text' | 'size';
4
4
  /**
@@ -5,6 +5,8 @@ export interface Links {
5
5
  self: string;
6
6
  }
7
7
  export interface Pagination {
8
+ price_max: number;
9
+ price_min: number;
8
10
  attributes: any;
9
11
  category: any;
10
12
  options: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ng-easycommerce-v18",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^18.2.0",
6
6
  "@angular/core": "^18.2.0"