2 * ========================LICENSE_START=================================
5 * Copyright (C) 2021 Nordix Foundation
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ========================LICENSE_END===================================
20 import { Component, OnInit } from '@angular/core';
21 import { FormControl, FormGroup } from '@angular/forms';
22 import { Sort } from '@angular/material/sort';
23 import { MatTableDataSource } from '@angular/material/table';
24 import { EIProducer } from '../../interfaces/ei.types';
25 import { UiService } from '../../services/ui/ui.service';
26 import { EIProducerDataSource } from '../ei-producer.datasource';
29 selector: 'nrcp-producers-list',
30 templateUrl: './producers-list.component.html',
31 styleUrls: ['./producers-list.component.scss']
33 export class ProducersListComponent implements OnInit {
35 producersDataSource: MatTableDataSource<EIProducer> = new MatTableDataSource<EIProducer>();
36 producerForm: FormGroup;
39 private eiProducersDataSource: EIProducerDataSource,
40 private ui: UiService) {
42 this.producerForm = new FormGroup({
43 ei_producer_id: new FormControl(''),
44 ei_producer_types: new FormControl(''),
45 status: new FormControl('')
52 this.producerForm.valueChanges.subscribe(value => {
53 const filter = { ...value, ei_producer_id: value.ei_producer_id.trim().toLowerCase() } as string;
54 this.producersDataSource.filter = filter;
57 this.producersDataSource.filterPredicate = ((data, filter) => {
58 return this.isDataIncluding(data.ei_producer_id, filter.ei_producer_id)
59 && this.isDataIncluding(data.ei_producer_types.join(','), filter.ei_producer_types)
60 && this.isDataIncluding(data.status, filter.status);
61 }) as (data: EIProducer, filter: any) => boolean;
63 this.ui.darkModeState.subscribe((isDark) => {
64 this.darkMode = isDark;
68 isDataIncluding(data: string, filter: string): boolean {
69 return !filter || data.toLowerCase().includes(filter);
72 sortProducers(sort: Sort) {
73 const data = this.producersDataSource.data
74 data.sort((a: EIProducer, b: EIProducer) => {
75 const isAsc = sort.direction === 'asc';
76 switch (sort.active) {
77 case 'id': return this.compare(a.ei_producer_id, b.ei_producer_id, isAsc);
78 case 'types': return this.compare(a.ei_producer_types, b.ei_producer_types, isAsc);
79 case 'status': return this.compare(a.status, b.status, isAsc);
83 this.producersDataSource.data = data;
86 compare(a: any, b: any, isAsc: boolean) {
87 return (a < b ? -1 : 1) * (isAsc ? 1 : -1);
90 stopSort(event: any) {
91 event.stopPropagation();
94 getProducerTypes(eiProducer: EIProducer): string[] {
95 if (eiProducer.ei_producer_types) {
96 return eiProducer.ei_producer_types;
98 return ['< No types >'];
101 getProducerStatus(eiProducer: EIProducer): string {
102 if (eiProducer.status) {
103 return eiProducer.status;
105 return '< No status >';
109 this.eiProducersDataSource.loadProducers();
110 this.eiProducersDataSource.eiProducersSubject().subscribe((data) => {
111 this.producersDataSource.data = data;