| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
- import { FormControl } from '@angular/forms';
- import { CustomFieldConfigType, CustomFieldControl, SharedModule } from '@vendure/admin-ui/core';
- type StarType = 'empty' | 'full' | 'half';
- @Component({
- selector: 'star-rating',
- templateUrl: './star-rating.component.html',
- styleUrls: ['./star-rating.component.scss'],
- changeDetection: ChangeDetectionStrategy.Default,
- standalone: true,
- imports: [SharedModule],
- })
- export class StarRatingComponent implements CustomFieldControl {
- @Input() rating: number | null;
- @Input() showLabel = false;
- readonly: boolean;
- config: CustomFieldConfigType;
- formControl: FormControl;
- get starRating(): number {
- return this.formControl ? this.formControl.value : this.rating;
- }
- get stars(): StarType[] {
- const rating = this.starRating;
- return Array.from({ length: 5 }).map((_, i) => {
- const pos = i + 1;
- const filled = rating >= pos;
- if (filled) {
- return 'full';
- }
- if (Math.ceil(rating) < pos) {
- return 'empty';
- }
- return 'half';
- });
- }
- }
|