File

feature-libs/product-configurator/rulebased/components/product-title/configurator-product-title.component.ts

Metadata

changeDetection ChangeDetectionStrategy.OnPush
selector cx-configurator-product-title
templateUrl ./configurator-product-title.component.html

Index

Properties
Methods

Constructor

constructor(configuratorCommonsService: ConfiguratorCommonsService, configRouterExtractorService: ConfiguratorRouterExtractorService, productService: ProductService)
Parameters :
Name Type Optional
configuratorCommonsService ConfiguratorCommonsService No
configRouterExtractorService ConfiguratorRouterExtractorService No
productService ProductService No

Methods

triggerDetails
triggerDetails()
Returns : void

Properties

iconTypes
Default value : ICON_TYPE
product$
Type : Observable<Product>
Default value : this.configRouterExtractorService .extractRouterData() .pipe( switchMap((routerData) => this.configuratorCommonsService.getConfiguration(routerData.owner) ), map((configuration) => { switch (configuration.owner.type) { case CommonConfigurator.OwnerType.PRODUCT: case CommonConfigurator.OwnerType.CART_ENTRY: return configuration.productCode; case CommonConfigurator.OwnerType.ORDER_ENTRY: return configuration.overview?.productCode; } }), switchMap((productCode) => productCode ? this.productService.get(productCode, ProductScope.LIST) : EMPTY ) )
showMore
Default value : false
import { ChangeDetectionStrategy, Component } from '@angular/core';
import { Product, ProductScope, ProductService } from '@spartacus/core';
import {
  CommonConfigurator,
  ConfiguratorRouterExtractorService,
} from '@spartacus/product-configurator/common';
import { ICON_TYPE } from '@spartacus/storefront';
import { EMPTY, Observable } from 'rxjs';
import { map, switchMap } from 'rxjs/operators';
import { ConfiguratorCommonsService } from '../../core/facade/configurator-commons.service';

@Component({
  selector: 'cx-configurator-product-title',
  templateUrl: './configurator-product-title.component.html',
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class ConfiguratorProductTitleComponent {
  product$: Observable<Product> = this.configRouterExtractorService
    .extractRouterData()
    .pipe(
      switchMap((routerData) =>
        this.configuratorCommonsService.getConfiguration(routerData.owner)
      ),
      map((configuration) => {
        switch (configuration.owner.type) {
          case CommonConfigurator.OwnerType.PRODUCT:
          case CommonConfigurator.OwnerType.CART_ENTRY:
            return configuration.productCode;
          case CommonConfigurator.OwnerType.ORDER_ENTRY:
            return configuration.overview?.productCode;
        }
      }),
      switchMap((productCode) =>
        productCode
          ? this.productService.get(productCode, ProductScope.LIST)
          : EMPTY
      )
    );
  showMore = false;
  iconTypes = ICON_TYPE;

  constructor(
    protected configuratorCommonsService: ConfiguratorCommonsService,
    protected configRouterExtractorService: ConfiguratorRouterExtractorService,
    protected productService: ProductService
  ) {}

  triggerDetails(): void {
    this.showMore = !this.showMore;
  }
}
<ng-container *ngIf="product$ | async as product">
  <div class="cx-general-product-info">
    <div class="cx-title">
      <span> {{ product.name }} </span>
    </div>
    <button (click)="triggerDetails()">
      <ng-container *ngIf="!showMore">
        <div class="cx-toggle-details-link-text">
          {{ 'configurator.header.showMore' | cxTranslate }}
        </div>
        <cx-icon [type]="iconTypes.CARET_DOWN"></cx-icon>
      </ng-container>

      <ng-container *ngIf="showMore">
        <div class="cx-toggle-details-link-text">
          {{ 'configurator.header.showLess' | cxTranslate }}
        </div>
        <cx-icon [type]="iconTypes.CARET_UP"></cx-icon>
      </ng-container>
    </button>
    <div class="cx-details" [class.open]="showMore">
      <div class="cx-details-image">
        <cx-media
          [container]="product?.images?.PRIMARY"
          format="product"
        ></cx-media>
      </div>
      <div class="cx-details-content">
        <div class="cx-detail-title">
          <span *ngIf="product.name"> {{ product.name }} </span>
        </div>
        <div class="cx-code">
          <span *ngIf="product.code"> {{ product.code }} </span>
        </div>
        <div class="cx-description">
          <span *ngIf="product.description"> {{ product.description }} </span>
        </div>
      </div>
    </div>
  </div>
</ng-container>
Legend
Html element
Component
Html element with directive

result-matching ""

    No results matching ""