Skip to content
Snippets Groups Projects
criteria-by-family.component.ts 2.27 KiB
Newer Older
  • Learn to ignore specific revisions
  • François Agneray's avatar
    François Agneray committed
    /**
     * 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 { Criterion, SvomKeyword } from '../../../store/models';
    
    François Agneray's avatar
    François Agneray committed
    import { Attribute, Option } from 'src/app/metamodel/models';
    
    
    /**
     * @class
     * @classdesc Search criteria by family component.
     */
    
    François Agneray's avatar
    François Agneray committed
    @Component({
        selector: 'app-criteria-by-family',
        templateUrl: 'criteria-by-family.component.html',
        changeDetection: ChangeDetectionStrategy.OnPush
    })
    export class CriteriaByFamilyComponent {
        @Input() attributeList: Attribute[];
        @Input() criteriaList: Criterion[];
    
        @Input() svomKeywords: SvomKeyword[];
        @Output() selectSvomAcronym: EventEmitter<string> = new EventEmitter();
        @Output() resetSvomKeywords: EventEmitter<{}> = new EventEmitter();
    
    François Agneray's avatar
    François Agneray committed
        @Output() addCriterion: EventEmitter<Criterion> = new EventEmitter();
        @Output() deleteCriterion: EventEmitter<number> = new EventEmitter();
    
        advancedForm = false;
    
        /**
         * Returns options for the given attribute ID.
         *
         * @param  {number} idAttribute - The attribute ID.
         *
         * @return Option[]
         */
        getOptions(idAttribute: number): Option[] {
            return [...this.attributeList.find(attribute => attribute.id === idAttribute).options];
        }
    
        /**
         * Returns criterion for the given criterion ID.
         *
         * @param  {number} id - The criterion ID.
         *
         * @return Criterion
         */
        getCriterion(id: number): Criterion {
            return this.criteriaList.find(criterion => criterion.id === id);
        }
    
        /**
         * Emits event to add the given criterion to the criteria list.
         *
         * @param  {Criterion} criterion - The criterion.
         *
         * @fires EventEmitter<Criterion>
         */
        emitAdd(criterion: Criterion): void {
            this.addCriterion.emit(criterion);
        }
    
        /**
         * Emits event to remove the given criterion ID from the criteria list.
         *
         * @param  {number} id - The criterion ID.
         *
         * @fires EventEmitter<number>
         */
        emitDelete(id: number): void {
            this.deleteCriterion.emit(id);
        }
    }