File
Metadata
| changeDetection |
ChangeDetectionStrategy.OnPush |
| selector |
cx-configurator-product-title |
| templateUrl |
./configurator-product-title.component.html |
Methods
|
triggerDetails
|
triggerDetails()
|
|
|
|
|
|
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 with directive