import { Component, Output, EventEmitter, Input } from '@angular/core' import { CoListViewTableComponent } from 'co-list-view-table/co-list-view-table' import { CbsModel } from 'co-browser-storage/co-browser-storage' import { CoRequestManagerConfig } from './co-request-manager.config' @Component({ selector: 'manage-requests', directives: [CoListViewTableComponent], template: `
` }) export class ManageRequestsComponent { @Input() listHeight = 'auto'; @Output() selectedRequest = new EventEmitter(); constructor ( private cbsModel: CbsModel, private coRequestManagerConfig: CoRequestManagerConfig ) {} public tableConfig = { columnDefs: [ { field: 'name', displayName: 'Name', search: true }, { field: 'method', displayName: 'Method', search: true }, { field: 'group', displayName: 'Group', search: true, sortDefault: true }, { displayName: '', type: 'button', config: { buttonName: 'remove', buttonClass: 'btn btn-sm btn-outline-danger' } } ] } public requestList$ = this.cbsModel .getItemByKey(this.coRequestManagerConfig.browserStorageKey) .map(config => { let configFromStorage = JSON.parse(config.value) let configWithGroup = configFromStorage.requests.map(request => { return Object.assign({}, request, { // just assume that tag[0] is group group: request.tags[0] }) }) return configWithGroup }) public removeItem ({colSpec, row}) { if (confirm('Are you sure you want to remove request?')) { this.cbsModel.getItemByKey(this.coRequestManagerConfig.browserStorageKey) .take(1) .subscribe(config => { // Currently saved config let configFromStorage = JSON.parse(config.value) // Remove request from requests array let requestsItemRemoved = configFromStorage.requests.filter(savedRequest => { return savedRequest.id !== row.id }) // create updated config object with request removed let updatedConfig = Object.assign({}, configFromStorage, { requests: requestsItemRemoved }) // persist updated config to browser storage this.cbsModel.updateItem({ key: this.coRequestManagerConfig.browserStorageKey, value: JSON.stringify(updatedConfig) }) }) } } }