import { Component, OnInit, ViewChild, Input, ComponentRef, ComponentFactoryResolver, AfterViewInit } from '@angular/core'; import { HomeScreenHeaderComponent } from '../home-screen-header/home-screen-header'; import { WindowComponent } from '../kendo-widgets/window/window.component' import { GridFactory } from '../factories/grid-factory' import { LookupGridComponent } from '../lookup-grid-component/lookup-grid-component'; import { LookupService } from '../services/lookup-service'; import { Response } from '@angular/http'; import { LookupHomeScreenOptions, HomeScreenHeaderOptions } from '../types/home-screen-types'; @Component({ selector: 'lookup-home-screen', templateUrl: './lookup-home-screen.component.html', styleUrls: ['./lookup-home-screen.component.css'] }) export class LookupHomeScreenComponent implements OnInit, AfterViewInit { @ViewChild("header_template") private header_template: HomeScreenHeaderComponent; @Input() private homeScreenOptions: LookupHomeScreenOptions; /* @Input() private creationPopupWindowOptions: Types.PopupWindowOptions;*/ private headerConfig: HomeScreenHeaderOptions; @ViewChild('creationPopup') private kendoWindow: WindowComponent; private customGridOptions: LookupHomeScreenOptions; private gridFactory: GridFactory; private gridCmpRef: ComponentRef; private kendoWindowOptions; private emptyCreationModel = {}; constructor(private lookupService: LookupService, private componentFactoryResolver: ComponentFactoryResolver) { this.gridFactory = new GridFactory(componentFactoryResolver); } ngOnInit() { this.kendoWindowOptions = { visible: false, modal: true, width: '40%', title: false, actions: [ "Minimize", "Maximize", "Close" ] }; this.headerConfig = { objectName: this.homeScreenOptions.objectName, objectIcon: "fa fa-home", headerMainActions: [ { iconClass: "fa fa-trash", actionName: "delete", actionFunction: (e) => { e.preventDefault(); let selectedObjects = this.gridCmpRef.instance.getSelectedRows(); let myGrid = $('.k-grid').data('kendoGrid'); let idsToDelete = []; if (!selectedObjects || selectedObjects.length == 0) { console.warn('there are not selected rows'); return; } for (let obj of selectedObjects) { idsToDelete.push(obj.id.toString()); } this.lookupService.deleteInstances(this.homeScreenOptions.objectRemoteRestUrl, idsToDelete, (response) => { this.buildGridDataSource(); }, (responseBody) => { // in case of error for (let obj of responseBody.data) { var currentRow: any = myGrid.dataSource.get(obj.id); var responseErrors = obj.__errors__; var responseGeneralErrors = obj.__general_errors__; currentRow.set("responseErrors", responseErrors); currentRow.set("responseGeneralErrors", responseGeneralErrors); currentRow.set("actionFlag", true); idsToDelete.splice(idsToDelete.indexOf(obj.id.toString()), 1); } for (let item of idsToDelete) { var rowToDelete = myGrid.dataSource.get(item); myGrid.dataSource.remove(rowToDelete); //removes it actually from the grid } }); } } ], craetionBtnActionFunction: (e: any) => { e.preventDefault(); this.kendoWindow.ProtoType.open(); this.kendoWindow.ProtoType.center(); } }; this.customGridOptions = this.homeScreenOptions; this.gridCmpRef = this.gridFactory.createLookupGrid(this.header_template.content, this.customGridOptions); $('#lookupHomeScreen_creationPopupBody').html(this.homeScreenOptions.creationPopupWindow.popupTplRef.nativeElement); this.emptyCreationModel = $.extend(true, this.emptyCreationModel, this.homeScreenOptions.creationModel); } ngAfterViewInit() { this.buildGridDataSource(); } buildGridDataSource() { this.lookupService.readAll(this.homeScreenOptions.objectRemoteRestUrl, (response) => { let myGrid = $('.k-grid').data('kendoGrid'); myGrid.dataSource.data(myGrid.dataSource.options.schema.parse(response.data)); myGrid.dataSource.pageSize(10); }); } private value: number = 0; create(e, openAnotherFlag) { let myGrid = $('.k-grid').data('kendoGrid'); this.lookupService.saveLookupInstance(this.homeScreenOptions.objectRemoteRestUrl, this.customGridOptions.creationModel, (response) => { // success myGrid.dataSource.add(response); this.homeScreenOptions.creationModel = $.extend(true, this.homeScreenOptions.creationModel, this.emptyCreationModel); if (!openAnotherFlag) { this.kendoWindow.ProtoType.close(); } }, (response) => { // failure this.homeScreenOptions.creationModel = response; // bound errors and warnings }); } cancelCreation(e: any) { e.preventDefault(); this.kendoWindow.ProtoType.close(); this.homeScreenOptions.creationModel = $.extend(true, this.homeScreenOptions.creationModel, this.emptyCreationModel); } openPopup(e: any) { } /** creation popup */ }