File

projects/storefrontlib/cms-components/product/product-list/product-grid-item/product-grid-item.component.ts

Implements

OnChanges

Metadata

changeDetection ChangeDetectionStrategy.OnPush
providers ProductListItemContextSource { provide: ProductListItemContext, useExisting: ProductListItemContextSource, }
selector cx-product-grid-item
templateUrl ./product-grid-item.component.html

Index

Properties
Methods
Inputs

Constructor

constructor(productListItemContextSource: ProductListItemContextSource)
Parameters :
Name Type Optional
productListItemContextSource ProductListItemContextSource No

Inputs

product
Type : any

Methods

ngOnChanges
ngOnChanges(changes?: SimpleChanges)
Parameters :
Name Type Optional
changes SimpleChanges Yes
Returns : void

Properties

product
Type : any
Decorators :
@Input()
Readonly ProductListOutlets
Default value : ProductListOutlets
import {
  ChangeDetectionStrategy,
  Component,
  Input,
  OnChanges,
  SimpleChanges,
} from '@angular/core';
import { ProductListOutlets } from '../../product-outlets.model';
import { ProductListItemContextSource } from '../model/product-list-item-context-source.model';
import { ProductListItemContext } from '../model/product-list-item-context.model';

@Component({
  selector: 'cx-product-grid-item',
  templateUrl: './product-grid-item.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush,
  providers: [
    ProductListItemContextSource,
    {
      provide: ProductListItemContext,
      useExisting: ProductListItemContextSource,
    },
  ],
})
export class ProductGridItemComponent implements OnChanges {
  readonly ProductListOutlets = ProductListOutlets;
  @Input() product: any;

  constructor(
    protected productListItemContextSource: ProductListItemContextSource
  ) {}

  ngOnChanges(changes?: SimpleChanges): void {
    if (changes?.product) {
      this.productListItemContextSource.product$.next(this.product);
    }
  }
}
<a
  [routerLink]="{ cxRoute: 'product', params: product } | cxUrl"
  class="cx-product-image-container"
  tabindex="-1"
>
  <cx-media
    class="cx-product-image"
    [container]="product.images?.PRIMARY"
    format="product"
    [alt]="product.summary"
  ></cx-media>
</a>
<a
  [routerLink]="{ cxRoute: 'product', params: product } | cxUrl"
  class="cx-product-name"
  [innerHTML]="product.nameHtml"
></a>

<ng-template [cxOutlet]="ProductListOutlets.ITEM_DETAILS">
  <div class="cx-product-rating">
    <cx-star-rating
      *ngIf="product.averageRating"
      [rating]="product?.averageRating"
    ></cx-star-rating>
    <div *ngIf="!product.averageRating">
      {{ 'productDetails.noReviews' | cxTranslate }}
    </div>
  </div>
  <div class="cx-product-price-container">
    <div
      class="cx-product-price"
      [attr.aria-label]="'productDetails.productPrice' | cxTranslate"
    >
      {{ product.price?.formattedValue }}
    </div>
  </div>
</ng-template>

<ng-template [cxOutlet]="ProductListOutlets.ITEM_ACTIONS">
  <cx-add-to-cart
    *ngIf="product.stock?.stockLevelStatus !== 'outOfStock'"
    [showQuantity]="false"
    [product]="product"
  ></cx-add-to-cart>
</ng-template>
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""