projects/rebirth-ng/src/lib/rating/rating.component.ts
| changeDetection | ChangeDetectionStrategy.OnPush | 
            
| exportAs | rating | 
            
| providers | 
                            {
    : , : (() => ), : true
}
                 | 
            
| selector | re-rating | 
            
| styleUrls | rating.component.scss | 
            
| templateUrl | ./rating.component.html | 
            
                        Properties | 
                
                        
  | 
                
                        Methods | 
                
                        Inputs | 
                
constructor(rebirthNGConfig: RebirthNGConfig, changeDetectorRef: ChangeDetectorRef)
                     | 
                |||||||||
| 
                             
                                    Parameters :
                                     
                    
  | 
                
                        
                        cssClass
                     | 
                    
                             
                            Type:      | 
                
                        
                        disabled
                     | 
                    
                         
                            Default value:   | 
                
                        
                        icons
                     | 
                    
                             
                            Type:      | 
                
                        
                        max
                     | 
                    
                             
                            Type:      | 
                
| enter | ||||||
enter(value: number)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| Private fillRatingRange | ||||||
                            
                        fillRatingRange(range: number)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                any
                             | 
                
| rate | ||||||
rate(value: number)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| registerOnChange | ||||||
registerOnChange(fn: any)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| registerOnTouched | ||||||
registerOnTouched(fn: any)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| reset | 
reset()
                     | 
                
| 
                             
                                Returns :      
                    void
                             | 
                
| setDisabledState | ||||||
setDisabledState(isDisabled: boolean)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| setRatingValue | ||||||
setRatingValue(value: number)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| writeValue | ||||||
writeValue(obj: any)
                     | 
                ||||||
| 
                             
                                    Parameters :
                                     
                            
 
                                Returns :      
                                void
                             | 
                
| Private onChange | 
                        onChange:     
                     | 
                
                            Default value : (_: any) => null
                         | 
                    
| Private onTouched | 
                        onTouched:     
                     | 
                
                            Default value : () => null
                         | 
                    
| ratingRanges | 
                        ratingRanges:     
                     | 
                
                            Type :     number[]
                         | 
                    
| statValue | 
                        statValue:     
                     | 
                
                            Type :     number
                         | 
                    
                            Default value : 0
                         | 
                    
| value | 
                        value:     
                     | 
                
                            Type :     number
                         | 
                    
                            Default value : 0
                         | 
                    
| valueChange | 
                        valueChange:     
                     | 
                
                            Default value : new EventEmitter<number>()
                         | 
                    
| max | ||||||
                        setmax(value: number)
                     | 
                ||||||
| 
                                 
                                        Parameters :
                                         
                                
 
                                    Returns :      
                        void
                                 | 
                    
import {
  Component, Input, EventEmitter, ChangeDetectionStrategy, forwardRef,
  ChangeDetectorRef
} from '@angular/core';
import { RebirthNGConfig } from '../rebirth-ng.config';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
@Component({
  selector: 're-rating',
  templateUrl: './rating.component.html',
  styleUrls: ['./rating.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush,
  exportAs: 'rating',
  providers: [{
    provide: NG_VALUE_ACCESSOR,
    useExisting: forwardRef(() => RatingComponent),
    multi: true
  }]
})
export class RatingComponent implements ControlValueAccessor {
  ratingRanges: number[];
  value = 0;
  @Input() disabled = false;
  @Input() cssClass: string;
  @Input() icons: { stateOn, stateOff };
  valueChange = new EventEmitter<number>();
  statValue = 0;
  private onChange = (_: any) => null;
  private onTouched = () => null;
  constructor(private rebirthNGConfig: RebirthNGConfig, private changeDetectorRef: ChangeDetectorRef) {
    this.icons = rebirthNGConfig.rating.icons;
    this.ratingRanges = this.fillRatingRange(rebirthNGConfig.rating.max);
  }
  @Input()
  set max(value: number) {
    this.ratingRanges = this.fillRatingRange(value);
  }
  setRatingValue(value: number) {
    this.statValue = this.value = value;
  }
  writeValue(obj: any): void {
    this.setRatingValue(obj);
    this.changeDetectorRef.markForCheck();
  }
  registerOnChange(fn: any): void {
    this.onChange = fn;
  }
  registerOnTouched(fn: any): void {
    this.onTouched = fn;
  }
  setDisabledState(isDisabled: boolean): void {
    this.disabled = isDisabled;
  }
  rate(value: number) {
    if (!this.disabled && this.value !== value) {
      this.onTouched();
      this.setRatingValue(value);
      this.valueChange.emit(this.value);
      this.onChange(this.value);
    }
  }
  enter(value: number) {
    if (!this.disabled) {
      this.onTouched();
      this.statValue = value;
    }
  }
  reset() {
    this.statValue = this.value;
  }
  private fillRatingRange(range: number) {
    return Array<number>(range).fill(0).map((_, i) => i + 1);
  }
}
    <span aria-labelledby="default-rating" class="rating {{cssClass}}">
  <span class="slider" (mouseleave)="reset()" tabindex="0" role="slider"
        [attr.aria-valuemin]="0" [attr.aria-valuemax]="ratingRanges.length" [attr.aria-valuenow]="statValue"
        [attr.aria-valuetext]="statValue">
   <ng-container *ngFor="let item of ratingRanges">
      <span class="sr-only">({{statValue >= item? "*": ""}} )</span>
      <i (mouseenter)="enter(item)" (click)="rate(item)"
         class="{{ statValue < item ? icons.stateOff: icons.stateOn}}"
         [attr.title]="item">
      </i>
   </ng-container>
 </span>
</span>