blob: aa471d328ea8e572af37ef787cbc096330cc3f55 [file] [log] [blame]
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { Settings } from '../../core/settings';
import { InputDialogComponent } from '../dialog/input-dialog/input-dialog.component';
import { ConfirmDialogComponent } from '../dialog/confirm-dialog/confirm-dialog.component';
@Component({
selector: 'hi-data-table',
templateUrl: './data-table.component.html',
styleUrls: ['./data-table.component.scss']
})
export class DataTableComponent implements OnInit {
@Input() rows = [];
@Input() columns = [];
@Input() sorts = [];
@Input() deletable = false;
@Input() insertable = false;
@Output() update: EventEmitter<any> = new EventEmitter<any>();
@Output() create: EventEmitter<any> = new EventEmitter<any>();
@Output() delete: EventEmitter<any> = new EventEmitter<any>();
rowHeight = Settings.tableRowHeight;
constructor(
protected dialog: MatDialog
) { }
ngOnInit() {
}
onEdited(row, column, value) {
const prop = this.getPropName(column);
// only emit when value changes
if (row[prop] !== value) {
this.update.emit({
row: row,
column: column,
value: value
});
}
}
onCreate() {
let data = {
title: 'Create a new item',
message: 'Please enter the following information to continue:',
values: {}
};
for (const column of this.columns) {
const prop = this.getPropName(column);
data.values[prop] = {
label: column.name
};
}
this.dialog
.open(InputDialogComponent, {
data: data
})
.afterClosed()
.subscribe(result => {
if (result) {
this.create.emit(result);
}
});
}
onDelete(row) {
this.dialog
.open(ConfirmDialogComponent, {
data: {
title: 'Confirmation',
message: 'Are you sure you want to delete this configuration?'
}
})
.afterClosed()
.subscribe(result => {
if (result) {
this.delete.emit({
row: row
});
}
});
}
getPropName(column): string {
return column.prop ? column.prop : column.name.toLowerCase();
}
}