mirror of
https://github.com/valitydev/wazuh-kibana-app.git
synced 2024-11-06 18:05:20 +00:00
Small refactor for cdblist controller and views
This commit is contained in:
parent
4d8543db74
commit
65308d7be6
@ -12,7 +12,8 @@
|
||||
import * as FileSaver from '../../services/file-saver';
|
||||
import { stringToObj } from '../../utils/cdblist-to-object';
|
||||
|
||||
export function CdbListsController(
|
||||
export class CdbListsController {
|
||||
constructor(
|
||||
$scope,
|
||||
errorHandler,
|
||||
appState,
|
||||
@ -22,212 +23,220 @@ export function CdbListsController(
|
||||
apiReq,
|
||||
wazuhConfig,
|
||||
rulesetHandler
|
||||
) {
|
||||
$scope.isObject = item => typeof item === 'object';
|
||||
) {
|
||||
this.$scope = $scope
|
||||
this.errorHandler = errorHandler
|
||||
this.appState = appState
|
||||
this.csvReq = csvReq
|
||||
this.wzTableFilter = wzTableFilter
|
||||
this.$location = $location
|
||||
this.apiReq = apiReq
|
||||
this.wazuhConfig = wazuhConfig
|
||||
this.rulesetHandler = rulesetHandler
|
||||
|
||||
$scope.appliedFilters = [];
|
||||
/**
|
||||
* This performs a search with a given term
|
||||
*/
|
||||
$scope.search = term => {
|
||||
if (term && term.startsWith('group:') && term.split('group:')[1].trim()) {
|
||||
$scope.custom_search = '';
|
||||
const filter = { name: 'group', value: term.split('group:')[1].trim() };
|
||||
$scope.appliedFilters = $scope.appliedFilters.filter(
|
||||
item => item.name !== 'group'
|
||||
);
|
||||
$scope.appliedFilters.push(filter);
|
||||
$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else if (
|
||||
term &&
|
||||
term.startsWith('level:') &&
|
||||
term.split('level:')[1].trim()
|
||||
) {
|
||||
$scope.custom_search = '';
|
||||
const filter = { name: 'level', value: term.split('level:')[1].trim() };
|
||||
$scope.appliedFilters = $scope.appliedFilters.filter(
|
||||
item => item.name !== 'level'
|
||||
);
|
||||
$scope.appliedFilters.push(filter);
|
||||
$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else if (
|
||||
term &&
|
||||
term.startsWith('pci:') &&
|
||||
term.split('pci:')[1].trim()
|
||||
) {
|
||||
$scope.custom_search = '';
|
||||
const filter = { name: 'pci', value: term.split('pci:')[1].trim() };
|
||||
$scope.appliedFilters = $scope.appliedFilters.filter(
|
||||
item => item.name !== 'pci'
|
||||
);
|
||||
$scope.appliedFilters.push(filter);
|
||||
$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else if (
|
||||
term &&
|
||||
term.startsWith('gdpr:') &&
|
||||
term.split('gdpr:')[1].trim()
|
||||
) {
|
||||
$scope.custom_search = '';
|
||||
const filter = { name: 'gdpr', value: term.split('gdpr:')[1].trim() };
|
||||
$scope.appliedFilters = $scope.appliedFilters.filter(
|
||||
item => item.name !== 'gdpr'
|
||||
);
|
||||
$scope.appliedFilters.push(filter);
|
||||
$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else if (
|
||||
term &&
|
||||
term.startsWith('file:') &&
|
||||
term.split('file:')[1].trim()
|
||||
) {
|
||||
$scope.custom_search = '';
|
||||
const filter = { name: 'file', value: term.split('file:')[1].trim() };
|
||||
$scope.appliedFilters = $scope.appliedFilters.filter(
|
||||
item => item.name !== 'file'
|
||||
);
|
||||
$scope.appliedFilters.push(filter);
|
||||
$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else {
|
||||
$scope.$broadcast('wazuhSearch', { term, removeFilters: 0 });
|
||||
this.appliedFilters = [];
|
||||
this.searchTerm = '';
|
||||
this.viewingDetail = false;
|
||||
this.isArray = Array.isArray;
|
||||
this.newKey = '';
|
||||
this.newValue = '';
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* This show us if new filter is already included in filters
|
||||
* @param {String} filterName
|
||||
*/
|
||||
$scope.includesFilter = filterName =>
|
||||
$scope.appliedFilters.map(item => item.name).includes(filterName);
|
||||
|
||||
/**
|
||||
* Get a filter given its name
|
||||
* @param {String} filterName
|
||||
*/
|
||||
$scope.getFilter = filterName => {
|
||||
const filtered = $scope.appliedFilters.filter(
|
||||
item => item.name === filterName
|
||||
);
|
||||
return filtered.length ? filtered[0].value : '';
|
||||
};
|
||||
|
||||
/**
|
||||
* This a the filter given its name
|
||||
* @param {String} filterName
|
||||
*/
|
||||
$scope.removeFilter = filterName => {
|
||||
$scope.appliedFilters = $scope.appliedFilters.filter(
|
||||
item => item.name !== filterName
|
||||
);
|
||||
return $scope.$broadcast('wazuhRemoveFilter', { filterName });
|
||||
};
|
||||
|
||||
//Initialization
|
||||
$scope.searchTerm = '';
|
||||
$scope.viewingDetail = false;
|
||||
$scope.isArray = Array.isArray;
|
||||
$scope.newKey = '';
|
||||
$scope.newValue = '';
|
||||
|
||||
const configuration = wazuhConfig.getConfig();
|
||||
$scope.adminMode = !!(configuration || {}).admin;
|
||||
$onInit() {
|
||||
const configuration = this.wazuhConfig.getConfig();
|
||||
this.adminMode = !!(configuration || {}).admin;
|
||||
|
||||
// Reloading event listener
|
||||
$scope.$on('rulesetIsReloaded', () => {
|
||||
$scope.viewingDetail = false;
|
||||
if (!$scope.$$phase) $scope.$digest();
|
||||
this.$scope.$on('rulesetIsReloaded', () => {
|
||||
this.viewingDetail = false;
|
||||
if (!this.$scope.$$phase) this.$scope.$digest();
|
||||
});
|
||||
|
||||
$scope.$on('closeListView', () => {
|
||||
$scope.closeDetailView();
|
||||
this.$scope.$on('closeListView', () => {
|
||||
this.closeDetailView();
|
||||
});
|
||||
|
||||
/**
|
||||
* Get full data on CSV format
|
||||
*/
|
||||
$scope.downloadCsv = async () => {
|
||||
this.$scope.$on('wazuhShowCdbList', async (ev, parameters) => {
|
||||
this.currentList = parameters.cdblist;
|
||||
try {
|
||||
errorHandler.info('Your download should begin automatically...', 'CSV');
|
||||
const currentApi = JSON.parse(appState.getCurrentAPI()).id;
|
||||
const output = await csvReq.fetch(
|
||||
'/cdblists',
|
||||
currentApi,
|
||||
wzTableFilter.get()
|
||||
const data = await this.rulesetHandler.getCdbList(
|
||||
`${this.currentList.path}/${this.currentList.name}`
|
||||
);
|
||||
const blob = new Blob([output], { type: 'text/csv' }); // eslint-disable-line
|
||||
|
||||
FileSaver.saveAs(blob, 'cdblists.csv');
|
||||
|
||||
return;
|
||||
this.currentList.list = stringToObj(data.data.data);
|
||||
this.viewingDetail = true;
|
||||
this.$scope.$emit('setCurrentList', { currentList: this.currentList });
|
||||
} catch (error) {
|
||||
errorHandler.handle(error, 'Download CSV');
|
||||
this.currentList.list = [];
|
||||
this.errorHandler.handle(error, '');
|
||||
}
|
||||
return;
|
||||
};
|
||||
|
||||
/**
|
||||
* This function takes back to the list but adding a filter from the detail view
|
||||
*/
|
||||
$scope.addDetailFilter = (name, value) => {
|
||||
$scope.appliedFilters.push({ name, value });
|
||||
// Clear the autocomplete component
|
||||
$scope.searchTerm = '';
|
||||
// Go back to the list
|
||||
$scope.closeDetailView();
|
||||
};
|
||||
|
||||
//listeners
|
||||
$scope.$on('wazuhShowCdbList', async (ev, parameters) => {
|
||||
$scope.currentList = parameters.cdblist;
|
||||
try {
|
||||
const data = await rulesetHandler.getCdbList(
|
||||
`${$scope.currentList.path}/${$scope.currentList.name}`
|
||||
);
|
||||
$scope.currentList.list = stringToObj(data.data.data);
|
||||
$scope.viewingDetail = true;
|
||||
$scope.$emit('setCurrentList', { currentList: $scope.currentList });
|
||||
} catch (error) {
|
||||
$scope.currentList.list = [];
|
||||
errorHandler.handle(error, '');
|
||||
}
|
||||
$scope.$broadcast('changeCdbList', { currentList: $scope.currentList });
|
||||
if (!$scope.$$phase) $scope.$digest();
|
||||
this.$scope.$broadcast('changeCdbList', { currentList: this.currentList });
|
||||
if (!this.$scope.$$phase) this.$scope.$digest();
|
||||
});
|
||||
|
||||
/**
|
||||
* This function changes to the lists list view
|
||||
*/
|
||||
$scope.closeDetailView = clear => {
|
||||
if (clear)
|
||||
$scope.appliedFilters = $scope.appliedFilters.slice(
|
||||
0,
|
||||
$scope.appliedFilters.length - 1
|
||||
);
|
||||
$scope.viewingDetail = false;
|
||||
$scope.currentList = false;
|
||||
$scope.$emit('removeCurrentList');
|
||||
if (!$scope.$$phase) $scope.$digest();
|
||||
};
|
||||
|
||||
if ($location.search() && $location.search().listname) {
|
||||
const incomingList = $location.search().listname;
|
||||
$location.search('listname', null);
|
||||
apiReq
|
||||
const currentLocation = this.$location.search();
|
||||
if ((currentLocation || {}).listname) {
|
||||
const incomingList = this.$location.search().listname;
|
||||
this.$location.search('listname', null);
|
||||
this.apiReq
|
||||
.request('get', `/cdblists/${incomingList}`, {})
|
||||
.then(data => {
|
||||
$scope.currentList = data.data.data.items[0];
|
||||
$scope.$emit('setCurrentList', { currentList: $scope.currentList });
|
||||
this.currentList = data.data.data.items[0];
|
||||
this.$scope.$emit('setCurrentList', { currentList: this.currentList });
|
||||
if (
|
||||
!(Object.keys(($scope.currentList || {}).details || {}) || []).length
|
||||
!(Object.keys((this.currentList || {}).details || {}) || []).length
|
||||
) {
|
||||
$scope.currentList.details = false;
|
||||
this.currentList.details = false;
|
||||
}
|
||||
$scope.viewingDetail = true;
|
||||
if (!$scope.$$phase) $scope.$digest();
|
||||
this.viewingDetail = true;
|
||||
if (!this.$scope.$$phase) this.$scope.$digest();
|
||||
})
|
||||
.catch(() =>
|
||||
errorHandler.handle(
|
||||
this.errorHandler.handle(
|
||||
`Error fetching list: ${incomingList} from the Wazuh API`,
|
||||
'CDB Lists'
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
search(term) {
|
||||
console.log('TERM:' + term)
|
||||
if (term && term.startsWith('group:') && term.split('group:')[1].trim()) {
|
||||
this.custom_search = '';
|
||||
const filter = { name: 'group', value: term.split('group:')[1].trim() };
|
||||
this.appliedFilters = this.appliedFilters.filter(
|
||||
item => item.name !== 'group'
|
||||
);
|
||||
this.appliedFilters.push(filter);
|
||||
this.$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else if (
|
||||
term &&
|
||||
term.startsWith('level:') &&
|
||||
term.split('level:')[1].trim()
|
||||
) {
|
||||
this.custom_search = '';
|
||||
const filter = { name: 'level', value: term.split('level:')[1].trim() };
|
||||
this.appliedFilters = this.appliedFilters.filter(
|
||||
item => item.name !== 'level'
|
||||
);
|
||||
this.appliedFilters.push(filter);
|
||||
this.$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else if (
|
||||
term &&
|
||||
term.startsWith('pci:') &&
|
||||
term.split('pci:')[1].trim()
|
||||
) {
|
||||
this.custom_search = '';
|
||||
const filter = { name: 'pci', value: term.split('pci:')[1].trim() };
|
||||
this.appliedFilters = this.appliedFilters.filter(
|
||||
item => item.name !== 'pci'
|
||||
);
|
||||
this.appliedFilters.push(filter);
|
||||
this.$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else if (
|
||||
term &&
|
||||
term.startsWith('gdpr:') &&
|
||||
term.split('gdpr:')[1].trim()
|
||||
) {
|
||||
this.custom_search = '';
|
||||
const filter = { name: 'gdpr', value: term.split('gdpr:')[1].trim() };
|
||||
this.appliedFilters = this.appliedFilters.filter(
|
||||
item => item.name !== 'gdpr'
|
||||
);
|
||||
this.appliedFilters.push(filter);
|
||||
this.$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else if (
|
||||
term &&
|
||||
term.startsWith('file:') &&
|
||||
term.split('file:')[1].trim()
|
||||
) {
|
||||
this.custom_search = '';
|
||||
const filter = { name: 'file', value: term.split('file:')[1].trim() };
|
||||
this.appliedFilters = this.appliedFilters.filter(
|
||||
item => item.name !== 'file'
|
||||
);
|
||||
this.appliedFilters.push(filter);
|
||||
this.$scope.$broadcast('wazuhFilter', { filter });
|
||||
} else {
|
||||
this.$scope.$broadcast('wazuhSearch', { term, removeFilters: 0 });
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This show us if new filter is already included in filters
|
||||
* @param {String} filterName
|
||||
*/
|
||||
includesFilter(filterName) {
|
||||
return this.appliedFilters.map(item => item.name).includes(filterName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a filter given its name
|
||||
* @param {String} filterName
|
||||
*/
|
||||
getFilter(filterName) {
|
||||
const filtered = this.appliedFilters.filter(
|
||||
item => item.name === filterName
|
||||
);
|
||||
return filtered.length ? filtered[0].value : '';
|
||||
}
|
||||
|
||||
/**
|
||||
* This a the filter given its name
|
||||
* @param {String} filterName
|
||||
*/
|
||||
removeFilter(filterName) {
|
||||
this.appliedFilters = this.appliedFilters.filter(
|
||||
item => item.name !== filterName
|
||||
);
|
||||
return this.$scope.$broadcast('wazuhRemoveFilter', { filterName });
|
||||
}
|
||||
|
||||
/**
|
||||
* Get full data on CSV format
|
||||
*/
|
||||
async downloadCsv() {
|
||||
try {
|
||||
this.errorHandler.info('Your download should begin automatically...', 'CSV');
|
||||
const currentApi = JSON.parse(this.appState.getCurrentAPI()).id;
|
||||
const output = await this.csvReq.fetch(
|
||||
'/cdblists',
|
||||
currentApi,
|
||||
this.wzTableFilter.get()
|
||||
);
|
||||
const blob = new Blob([output], { type: 'text/csv' }); // eslint-disable-line
|
||||
|
||||
FileSaver.saveAs(blob, 'cdblists.csv');
|
||||
|
||||
} catch (error) {
|
||||
this.errorHandler.handle(error, 'Download CSV');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function takes back to the list but adding a filter from the detail view
|
||||
*/
|
||||
addDetailFilter(name, value) {
|
||||
this.appliedFilters.push({ name, value });
|
||||
// Clear the autocomplete component
|
||||
this.searchTerm = '';
|
||||
// Go back to the list
|
||||
this.closeDetailView();
|
||||
}
|
||||
|
||||
/**
|
||||
* This function changes to the lists list view
|
||||
*/
|
||||
closeDetailView(clear) {
|
||||
if (clear)
|
||||
this.appliedFilters = this.appliedFilters.slice(
|
||||
0,
|
||||
this.appliedFilters.length - 1
|
||||
);
|
||||
this.viewingDetail = false;
|
||||
this.currentList = false;
|
||||
this.$scope.$emit('removeCurrentList');
|
||||
if (!this.$scope.$$phase) this.$scope.$digest();
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,14 @@
|
||||
<div ng-if="!loading && viewingDetail" layout="column" class="">
|
||||
<div ng-if="cdbctrl.viewingDetail" layout="column" class="">
|
||||
<!-- Back button and title -->
|
||||
<div layout="row" layout-align="start center">
|
||||
<!-- Back button -->
|
||||
<md-button class="md-icon-button" style="margin: 5px!important;" aria-label="Back to CDB Lists list"
|
||||
tooltip="Back" tooltip-placement="bottom" ng-click="closeDetailView(true)"><i class="fa fa-fw fa-arrow-left"
|
||||
tooltip="Back" tooltip-placement="bottom" ng-click="cdbctrl.closeDetailView(true)"><i class="fa fa-fw fa-arrow-left"
|
||||
aria-hidden="true"></i></md-button>
|
||||
<!-- List title -->
|
||||
<div>
|
||||
<!-- <h1 class="font-size-18">{{currentList.name}}</h1> -->
|
||||
<h1 class="font-size-18">{{currentList.name}}</h1>
|
||||
<h1 class="font-size-18">{{cdbctrl.currentList.name}}</h1>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End back button, title and status indicator -->
|
||||
@ -18,13 +18,13 @@
|
||||
<div layout="row" class="wz-padding-left-8 wz-padding-right-8">
|
||||
<md-card flex class="wz-metric-color wz-md-card">
|
||||
<md-card-content layout="row" class="wz-padding-metric">
|
||||
<div flex="50" class="wz-text-truncatable">Name: <span class="wz-text-bold wz-text-link">{{currentList.name}}</span></div>
|
||||
<div flex="50" class="wz-text-truncatable">Path: <span class="wz-text-bold wz-text-link">{{currentList.path}}</span></div>
|
||||
<div flex="50" class="wz-text-truncatable">Name: <span class="wz-text-bold wz-text-link">{{cdbctrl.currentList.name}}</span></div>
|
||||
<div flex="50" class="wz-text-truncatable">Path: <span class="wz-text-bold wz-text-link">{{cdbctrl.currentList.path}}</span></div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
</div>
|
||||
<!-- End List information ribbon -->
|
||||
|
||||
<wz-list-manage ng-if="currentList" list="currentList"></wz-list-manage>
|
||||
<wz-list-manage ng-if="cdbctrl.currentList" list="cdbctrl.currentList"></wz-list-manage>
|
||||
<br>
|
||||
</div>
|
@ -1,41 +1,40 @@
|
||||
<div ng-if="!loading && !viewingDetail" layout="column">
|
||||
<div ng-if="!cdbctrl.viewingDetail" layout="column">
|
||||
<div id="content" layout="row" class="md-padding ">
|
||||
<input flex placeholder="Filter lists..." ng-model="custom_search" type="text" class="kuiLocalSearchInput height-40 ng-empty ng-pristine ng-scope ng-touched ng-valid"
|
||||
aria-invalid="false" wz-enter="search(custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="search(custom_search)">
|
||||
<input flex placeholder="Filter lists..." ng-model="cdbctrl.custom_search" type="text" class="kuiLocalSearchInput height-40 ng-empty ng-pristine ng-scope ng-touched ng-valid" aria-invalid="false" wz-enter="cdbctrl.search(cdbctrl.custom_search)">
|
||||
<button type="submit" aria-label="Search" class="kuiLocalSearchButton height-40" ng-click="cdbctrl.search(cdbctrl.custom_search)">
|
||||
<span class="fa fa-search" aria-hidden="true"></span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<md-chips class="wz-chips md-padding-h" readonly="true" ng-show="appliedFilters.length">
|
||||
<md-chip class="wz-chip" ng-show="includesFilter('file')">
|
||||
<span>File: {{getFilter('file')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="removeFilter('file')"></i>
|
||||
<md-chips class="wz-chips md-padding-h" readonly="true" ng-show="cdbctrl.appliedFilters.length">
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('file')">
|
||||
<span>File: {{cdbctrl.getFilter('file')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('file')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="includesFilter('path')">
|
||||
<span>Path: {{getFilter('path')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="removeFilter('path')"></i>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('path')">
|
||||
<span>Path: {{cdbctrl.getFilter('path')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('path')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="includesFilter('level')">
|
||||
<span>Level: {{getFilter('level')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="removeFilter('level')"></i>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('level')">
|
||||
<span>Level: {{cdbctrl.getFilter('level')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('level')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="includesFilter('group')">
|
||||
<span>Group: {{getFilter('group')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="removeFilter('group')"></i>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('group')">
|
||||
<span>Group: {{cdbctrl.getFilter('group')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('group')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="includesFilter('pci')">
|
||||
<span>PCI control: {{getFilter('pci')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="removeFilter('pci')"></i>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('pci')">
|
||||
<span>PCI control: {{cdbctrl.getFilter('pci')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('pci')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
<md-chip class="wz-chip" ng-show="includesFilter('gdpr')">
|
||||
<span>GDPR: {{getFilter('gdpr')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="removeFilter('gdpr')"></i>
|
||||
<md-chip class="wz-chip" ng-show="cdbctrl.includesFilter('gdpr')">
|
||||
<span>GDPR: {{cdbctrl.getFilter('gdpr')}}
|
||||
<i class="fa fa-fw fa-times cursor-pointer" aria-hidden="true" ng-click="cdbctrl.removeFilter('gdpr')"></i>
|
||||
</span>
|
||||
</md-chip>
|
||||
</md-chips>
|
||||
@ -43,12 +42,11 @@
|
||||
<div layout="row">
|
||||
<md-card flex class="wz-md-card _md flex md-margin-h">
|
||||
<md-card-content>
|
||||
<wz-table implicit-filter="appliedFilters" flex path="'/lists/files'" keys="['name', 'path']"
|
||||
allow-click="true" row-sizes="[15,13,11]">
|
||||
<wz-table implicit-filter="cdbctrl.appliedFilters" flex path="'/lists/files'" keys="['name', 'path']" allow-click="true" row-sizes="[15,13,11]">
|
||||
</wz-table>
|
||||
<div layout="row" class="wz-margin-top-10 md-padding-h">
|
||||
<span flex></span>
|
||||
<a class="small" id="btnDownload" ng-click="downloadCsv()">Formatted <i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
<a class="small" id="btnDownload" ng-click="cdbctrl.downloadCsv()">Formatted <i aria-hidden="true" class="fa fa-download"></i></a>
|
||||
</div>
|
||||
</md-card-content>
|
||||
</md-card>
|
||||
|
@ -1,6 +1,2 @@
|
||||
<div flex ng-if="!loading && mctrl.globalRuleSet == 'ruleset' && mctrl.globalRulesetTab == 'cdblists'" class="" ng-controller="cdbListsController"
|
||||
<div flex ng-if="mctrl.globalRuleSet == 'ruleset' && mctrl.globalRulesetTab == 'cdblists'" class="" ng-controller="cdbListsController as cdbctrl"
|
||||
layout="column" id="rulesContainer" layout-align="start space-around">
|
||||
|
||||
<div class='uil-ring-css' ng-show="loading">
|
||||
<div></div>
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user