File

feature-libs/product/variants/components/variant-size-selector/product-variant-size-selector.component.ts

Metadata

changeDetection ChangeDetectionStrategy.OnPush
selector cx-product-variant-size-selector
templateUrl ./product-variant-size-selector.component.html

Index

Properties
Methods
Inputs

Constructor

constructor(productService: ProductService, routingService: RoutingService)
Parameters :
Name Type Optional
productService ProductService No
routingService RoutingService No

Inputs

product
Type : Product
variants
Type : BaseOption

Methods

changeSize
changeSize(code: string)
Parameters :
Name Type Optional
code string No
Returns : null
getVariantOptionValue
getVariantOptionValue(qualifiers: VariantOptionQualifier[])
Parameters :
Name Type Optional
qualifiers VariantOptionQualifier[] No
Returns : any

Properties

product
Type : Product
Decorators :
@Input()
variants
Type : BaseOption
Decorators :
@Input()
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
import {
  Product,
  RoutingService,
  BaseOption,
  VariantQualifier,
  VariantOptionQualifier,
  ProductService,
  ProductScope,
} from '@spartacus/core';
import { filter, take } from 'rxjs/operators';

@Component({
  selector: 'cx-product-variant-size-selector',
  templateUrl: './product-variant-size-selector.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ProductVariantSizeSelectorComponent {
  constructor(
    private productService: ProductService,
    private routingService: RoutingService
  ) {}

  @Input()
  product: Product;

  @Input()
  variants: BaseOption;

  changeSize(code: string): null {
    if (code) {
      this.productService
        .get(code, ProductScope.LIST)
        .pipe(
          // below call might looks redundant but in fact this data is going to be loaded anyways
          // we're just calling it earlier and storing
          filter((p) => !!p),
          take(1)
        )
        .subscribe((product: Product) => {
          this.routingService.go({
            cxRoute: 'product',
            params: product,
          });
        });
    }
    return null;
  }
  getVariantOptionValue(qualifiers: VariantOptionQualifier[]) {
    const obj = qualifiers.find((q) => q.qualifier === VariantQualifier.SIZE);
    return obj ? obj.value : '';
  }
}
<ng-container>
  <div class="variant-selector">
    <div class="variant-name">{{ 'productVariants.size' | cxTranslate }}:</div>
    <select
      (change)="changeSize($event.target.value)"
      class="form-control variant-select"
    >
      <option
        *ngFor="let v of variants?.options"
        value="{{ v.code }}"
        [selected]="v.code === product?.code"
      >
        {{ getVariantOptionValue(v.variantOptionQualifiers) }}
      </option>
    </select>
    <a
      href="#"
      class="size-guide"
      title="{{ 'productVariants.sizeGuideLabel' | cxTranslate }}"
    >
      {{ 'productVariants.sizeGuideLabel' | cxTranslate }}
    </a>
  </div>
</ng-container>
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""