File

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

Metadata

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

Index

Properties
Methods
Inputs

Constructor

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

Inputs

variants
Type : BaseOption

Methods

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

Properties

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

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

  variantQualifier = VariantQualifier;

  @Input()
  variants: BaseOption;

  getVariantOptionValue(qualifiers: VariantOptionQualifier[]) {
    const obj = qualifiers.find((q) => q.qualifier === VariantQualifier.STYLE);
    return obj ? obj.value : '';
  }

  getVariantThumbnailUrl(
    variantOptionQualifiers: VariantOptionQualifier[]
  ): string {
    const qualifier = variantOptionQualifiers.find((item) => item.image);

    return qualifier
      ? `${this.config?.backend?.occ?.baseUrl}${qualifier.image?.url}`
      : '';
  }

  changeStyle(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;
  }
}
<ng-container>
  <div class="variant-selector">
    <div *ngIf="variants.selected" class="variant-name">
      {{ 'productVariants.style' | cxTranslate }}:
      <span class="style-name">{{
        getVariantOptionValue(variants?.selected.variantOptionQualifiers)
      }}</span>
    </div>
    <ul class="variant-list">
      <li
        *ngFor="let v of variants?.options"
        [ngClass]="{ 'selected-variant': v.code === variants?.selected?.code }"
      >
        <button class="variant-button" (click)="changeStyle(v.code)">
          <img
            src="{{ getVariantThumbnailUrl(v.variantOptionQualifiers) }}"
            title="{{ getVariantOptionValue(v.variantOptionQualifiers) }}"
            alt="{{ getVariantOptionValue(v.variantOptionQualifiers) }}"
          />
        </button>
      </li>
    </ul>
  </div>
</ng-container>
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""