Skip to content
Snippets Groups Projects
radius.component.ts 2.26 KiB
Newer Older
  • Learn to ignore specific revisions
  • /**
     * This file is part of Anis Client.
     *
     * @copyright Laboratoire d'Astrophysique de Marseille / CNRS
     *
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     */
    
    import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
    import { FormControl } from '@angular/forms';
    
    import { rangeValidator } from '../../validators';
    import { ConeSearch } from 'src/app/instance/store/models';
    
    @Component({
        selector: 'app-radius',
        templateUrl: 'radius.component.html',
        styleUrls: ['radius.component.scss'],
        changeDetection: ChangeDetectionStrategy.OnPush
    })
    /**
     * @class
     * @classdesc Radius component.
     */
    export class RadiusComponent {
        /**
         * Sets RA, DEC and radius from cone search.
         *
         * @param  {ConeSearch} coneSearch - The cone search.
         */
        @Input()
        set coneSearch(coneSearch: ConeSearch) {
            this.ra = coneSearch.ra;
            this.dec = coneSearch.dec;
            if (coneSearch.radius) {
                this.radiusField.setValue(coneSearch.radius);
                this.radiusRange.setValue(coneSearch.radius);
            } else {
                this.radiusRange.setValue(0);
                this.radiusField.setValue(0);
            }
        }
        /**
         * Disables radius fields.
         *
         * @param  {boolean} disabled - If the field has to be disabled.
         */
        @Input()
        set disabled(disabled: boolean) {
            if (disabled) {
                this.radiusField.disable();
                this.radiusRange.disable();
            } else {
                this.radiusField.enable();
                this.radiusRange.enable();
            }
        }
        @Output() updateConeSearch: EventEmitter<ConeSearch> = new EventEmitter();
    
        ra: number;
        dec: number;
        radiusRange = new FormControl('');
        radiusField = new FormControl('', [rangeValidator(0, 150, 'Radius')]);
    
        /**
         * Sets radius value form inputs and emits cone search event.
         *
         * @param  {string} value - The value of radius.
         *
         * @fires EventEmitter<ConeSearch>
         */
        radiusChange(value: string): void {
            this.radiusField.setValue(+value);
            this.radiusRange.setValue(+value);
            this.updateConeSearch.emit({ ra: this.ra, dec: this.dec, radius: +value } as ConeSearch);
        }
    }