1 import { Component, EventEmitter, Input, OnChanges, OnInit, Output } from '@angular/core';
2 import { I18n } from '@ngx-translate/i18n-polyfill';
4 import * as _ from 'lodash';
6 import { BsModalService, ModalOptions } from 'ngx-bootstrap/modal';
7 import { Icons } from '../../../../shared/enum/icons.enum';
8 import { CdTableColumnFiltersChange } from '../../../../shared/models/cd-table-column-filters-change';
9 import { InventoryDevice } from '../../inventory/inventory-devices/inventory-device.model';
10 import { OsdDevicesSelectionModalComponent } from '../osd-devices-selection-modal/osd-devices-selection-modal.component';
11 import { DevicesSelectionChangeEvent } from './devices-selection-change-event.interface';
12 import { DevicesSelectionClearEvent } from './devices-selection-clear-event.interface';
15 selector: 'cd-osd-devices-selection-groups',
16 templateUrl: './osd-devices-selection-groups.component.html',
17 styleUrls: ['./osd-devices-selection-groups.component.scss']
19 export class OsdDevicesSelectionGroupsComponent implements OnInit, OnChanges {
21 @Input() type: string;
24 @Input() name: string;
26 @Input() hostname: string;
28 @Input() availDevices: InventoryDevice[];
30 @Input() canSelect: boolean;
33 selected = new EventEmitter<DevicesSelectionChangeEvent>();
36 cleared = new EventEmitter<DevicesSelectionClearEvent>();
39 devices: InventoryDevice[] = [];
41 appliedFilters: any[] = [];
43 addButtonTooltip: String;
45 noAvailDevices: this.i18n('No available devices'),
46 addPrimaryFirst: this.i18n('Please add primary devices first'),
47 addByFilters: this.i18n('Add devices by using filters')
50 constructor(private bsModalService: BsModalService, private i18n: I18n) {}
53 this.updateAddButtonTooltip();
57 this.updateAddButtonTooltip();
60 showSelectionModal() {
61 let filterColumns = ['human_readable_type', 'sys_api.vendor', 'sys_api.model', 'sys_api.size'];
62 if (this.type === 'data') {
63 filterColumns = ['hostname', ...filterColumns];
65 const options: ModalOptions = {
68 hostname: this.hostname,
69 deviceType: this.name,
70 devices: this.availDevices,
71 filterColumns: filterColumns
74 const modalRef = this.bsModalService.show(OsdDevicesSelectionModalComponent, options);
75 modalRef.content.submitAction.subscribe((result: CdTableColumnFiltersChange) => {
76 this.devices = result.data;
77 this.capacity = _.sumBy(this.devices, 'sys_api.size');
78 this.appliedFilters = result.filters;
79 const event = _.assign({ type: this.type }, result);
80 this.selected.emit(event);
84 private updateAddButtonTooltip() {
85 if (this.type === 'data' && this.availDevices.length === 0) {
86 this.addButtonTooltip = this.tooltips.noAvailDevices;
88 if (!this.canSelect) {
89 // No primary devices added yet.
90 this.addButtonTooltip = this.tooltips.addPrimaryFirst;
91 } else if (this.availDevices.length === 0) {
92 this.addButtonTooltip = this.tooltips.noAvailDevices;
94 this.addButtonTooltip = this.tooltips.addByFilters;
102 clearedDevices: [...this.devices]
105 this.cleared.emit(event);