File

projects/rebirth-ng/src/lib/rating/rating.component.ts

Implements

ControlValueAccessor

Metadata

changeDetection ChangeDetectionStrategy.OnPush
exportAs rating
providers { : , : (() => ), : true }
selector re-rating
styleUrls rating.component.scss
templateUrl ./rating.component.html

Index

Properties
Methods
Inputs

Constructor

constructor(rebirthNGConfig: RebirthNGConfig, changeDetectorRef: ChangeDetectorRef)
Parameters :
Name Type Optional
rebirthNGConfig RebirthNGConfig no
changeDetectorRef ChangeDetectorRef no

Inputs

cssClass

Type: string

disabled

Default value: false

icons

Type: literal type

max

Type: number

Methods

enter
enter(value: number)
Parameters :
Name Type Optional
value number no
Returns : void
Private fillRatingRange
fillRatingRange(range: number)
Parameters :
Name Type Optional
range number no
Returns : any
rate
rate(value: number)
Parameters :
Name Type Optional
value number no
Returns : void
registerOnChange
registerOnChange(fn: any)
Parameters :
Name Type Optional
fn any no
Returns : void
registerOnTouched
registerOnTouched(fn: any)
Parameters :
Name Type Optional
fn any no
Returns : void
reset
reset()
Returns : void
setDisabledState
setDisabledState(isDisabled: boolean)
Parameters :
Name Type Optional
isDisabled boolean no
Returns : void
setRatingValue
setRatingValue(value: number)
Parameters :
Name Type Optional
value number no
Returns : void
writeValue
writeValue(obj: any)
Parameters :
Name Type Optional
obj any no
Returns : void

Properties

Private onChange
onChange:
Default value : (_: any) => null
Private onTouched
onTouched:
Default value : () => null
ratingRanges
ratingRanges: number[]
Type : number[]
statValue
statValue: number
Type : number
Default value : 0
value
value: number
Type : number
Default value : 0
valueChange
valueChange:
Default value : new EventEmitter<number>()

Accessors

max
setmax(value: number)
Parameters :
Name Type Optional
value number no
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>
Legend
Html element
Component
Html element with directive

results matching ""

    No results matching ""