File

src/single-date-picker/single-date-picker.component.ts

Metadata

providers { provide: NG_VALUE_ACCESSOR, useExisting: , multi: }
selector angular-single-date-picker
template <div #singleDatePicker></div>

Inputs

props

Type: any

Methods

onBlur
onBlur()
Returns: void
updateReactDate
updateReactDate(date: any)
Returns: void
onTouchedCallback
onTouchedCallback()
Returns: void
onChangeCallback
onChangeCallback(_: any)
Returns: void

Properties

singleDatePicker
singleDatePicker: ElementRef
value
value: any
import { Component, OnInit, AfterViewInit, ViewChild, ElementRef, forwardRef, Input } from '@angular/core';
import { SingleDatePickerWrapper } from './single-date-picker-wrapper';
import { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';
import * as React from 'react';
import * as ReactDOM from 'react-dom';

@Component({
  selector: 'angular-single-date-picker',
  template: '<div #singleDatePicker></div>',
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => SingleDatePickerComponent),
      multi: true
    }
  ]
})
export class SingleDatePickerComponent implements OnInit, ControlValueAccessor, AfterViewInit {

  // Element reference
  @ViewChild('singleDatePicker')
  singleDatePicker: ElementRef;

  @Input()
  props: any;

  // Date value
  private date: any;

  ngOnInit(): void {
    // Initialize props if not specified
    if (!this.props) {
      this.props = {};
    }

    // Set some default props
    this.props.ngComponent = this;
    this.props.date = this.date;
  }

  ngAfterViewInit(): void {
    let container: any = this.singleDatePicker.nativeElement;
    ReactDOM.render(
      React.createElement(SingleDatePickerWrapper, this.props, null),
      container
    );
  }

  get value(): any {
    return this.date;
  };

  set value(v: any) {
    if (v !== this.date) {
      this.date = v;
      this.onChangeCallback(v);
    }
  }

  onBlur(): void {
    this.onTouchedCallback();
  }

  writeValue(value: any): void {
    if (value !== this.date) {
      // Update this angular component
      this.date = value;

      // Update react component value
      this.updateReactDate(value);
    }
  }

  updateReactDate(date: any): void {
    // Initially empty. This function is replaced when react component is created with its context.
  };

  registerOnChange(fn: any): void {
    this.onChangeCallback = fn;
  }

  registerOnTouched(fn: any): void {
    this.onTouchedCallback = fn;
  }

  onTouchedCallback(): void {
    //Placeholders for callback
  }

  onChangeCallback(_: any): void {
    //Placeholders for callback
  }

}

results matching ""

    No results matching ""