1 import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';
3 import * as _ from 'lodash';
5 import { Icons } from '../../../../shared/enum/icons.enum';
6 import { CdTableColumnFiltersChange } from '../../../../shared/models/cd-table-column-filters-change';
7 import { ModalService } from '../../../../shared/services/modal.service';
8 import { InventoryDevice } from '../../inventory/inventory-devices/inventory-device.model';
9 import { OsdDevicesSelectionModalComponent } from '../osd-devices-selection-modal/osd-devices-selection-modal.component';
10 import { DevicesSelectionChangeEvent } from './devices-selection-change-event.interface';
11 import { DevicesSelectionClearEvent } from './devices-selection-clear-event.interface';
14 selector: 'cd-osd-devices-selection-groups',
15 templateUrl: './osd-devices-selection-groups.component.html',
16 styleUrls: ['./osd-devices-selection-groups.component.scss']
18 export class OsdDevicesSelectionGroupsComponent implements OnInit, OnChanges {
20 @Input() type: string;
23 @Input() name: string;
25 @Input() hostname: string;
27 @Input() availDevices: InventoryDevice[];
29 @Input() canSelect: boolean;
32 selected = new EventEmitter<DevicesSelectionChangeEvent>();
35 cleared = new EventEmitter<DevicesSelectionClearEvent>();
38 devices: InventoryDevice[] = [];
40 appliedFilters: any[] = [];
42 addButtonTooltip: String;
44 noAvailDevices: $localize`No available devices`,
45 addPrimaryFirst: $localize`Please add primary devices first`,
46 addByFilters: $localize`Add devices by using filters`
49 constructor(private modalService: ModalService) {}
52 this.updateAddButtonTooltip();
56 this.updateAddButtonTooltip();
59 showSelectionModal() {
60 let filterColumns = ['human_readable_type', 'sys_api.vendor', 'sys_api.model', 'sys_api.size'];
61 if (this.type === 'data') {
62 filterColumns = ['hostname', ...filterColumns];
64 const initialState = {
65 hostname: this.hostname,
66 deviceType: this.name,
67 devices: this.availDevices,
68 filterColumns: filterColumns
70 const modalRef = this.modalService.show(OsdDevicesSelectionModalComponent, initialState, {
73 modalRef.componentInstance.submitAction.subscribe((result: CdTableColumnFiltersChange) => {
74 this.devices = result.data;
75 this.capacity = _.sumBy(this.devices, 'sys_api.size');
76 this.appliedFilters = result.filters;
77 const event = _.assign({ type: this.type }, result);
78 this.selected.emit(event);
82 private updateAddButtonTooltip() {
83 if (this.type === 'data' && this.availDevices.length === 0) {
84 this.addButtonTooltip = this.tooltips.noAvailDevices;
86 if (!this.canSelect) {
87 // No primary devices added yet.
88 this.addButtonTooltip = this.tooltips.addPrimaryFirst;
89 } else if (this.availDevices.length === 0) {
90 this.addButtonTooltip = this.tooltips.noAvailDevices;
92 this.addButtonTooltip = this.tooltips.addByFilters;
100 clearedDevices: [...this.devices]
103 this.cleared.emit(event);