File
Metadata
| changeDetection |
ChangeDetectionStrategy.OnPush |
| selector |
cx-product-variant-size-selector |
| templateUrl |
./product-variant-size-selector.component.html |
Index
Properties
|
|
|
Methods
|
|
|
Inputs
|
|
|
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
|
|
|
product
|
Type : Product
|
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 with directive