traffic_portal/app/src/common/modules/table/parameters/TableParametersController.js (137 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ /** * @param {*} parameters * @param {*} $scope * @param {*} $state * @param {import("../../../service/utils/angular.ui.bootstrap").IModalService} $uibModal * @param {import("angular").IWindowService} $window * @param {import("../../../service/utils/LocationUtils")} locationUtils * @param {import("../../../api/ParameterService")} parameterService * @param {import("../../../api/ProfileService")} profileService * @param {import("../../../models/MessageModel")} messageModel * @param {import("../../../models/PropertiesModel")} propertiesModel */ var TableParametersController = function(parameters, $scope, $state, $uibModal, $window, locationUtils, parameterService, profileService, messageModel, propertiesModel) { let parametersTable; var deleteParameter = function(parameter) { parameterService.deleteParameter(parameter.id) .then(function(result) { messageModel.setMessages(result.alerts, false); $scope.refresh(); }); }; var confirmDelete = function(parameter) { profileService.getParameterProfiles(parameter.id). then(function(result) { /** @type {{title: string; message?: string; key?: string}} */ let params = { title: 'Delete Parameter?', message: result.length + ' profiles use this parameter.<br><br>' }; if (result.length > 0) { params.message += result.map(p => p.name).join('<br>') + '<br><br>'; } params.message += 'Are you sure you want to delete the parameter?'; var modalInstance = $uibModal.open({ templateUrl: 'common/modules/dialog/confirm/dialog.confirm.tpl.html', controller: 'DialogConfirmController', size: 'md', resolve: { params: function () { return params; } } }); modalInstance.result.then(function() { params = { title: 'Delete Parameter: ' + parameter.name, key: parameter.name }; modalInstance = $uibModal.open({ templateUrl: 'common/modules/dialog/delete/dialog.delete.tpl.html', controller: 'DialogDeleteController', size: 'md', resolve: { params: function () { return params; } } }); modalInstance.result.then(function() { deleteParameter(parameter); }, function () { // do nothing }); }, function () { // do nothing }); }); }; $scope.parameters = parameters; $scope.columns = [ { "name": "Name", "visible": true, "searchable": true }, { "name": "Config File", "visible": true, "searchable": true }, { "name": "Value", "visible": true, "searchable": true }, { "name": "Secure", "visible": true, "searchable": true }, { "name": "Profiles", "visible": true, "searchable": true }, { "name": "Comment", "visible": true, "searchable": true } ]; $scope.contextMenuItems = [ { text: 'Open in New Tab', click: function ($itemScope) { $window.open('/#!/parameters/' + $itemScope.p.id, '_blank'); } }, null, // Dividier { text: 'Edit', click: function ($itemScope) { $scope.editParameter($itemScope.p.id); } }, { text: 'Delete', click: function ($itemScope) { confirmDelete($itemScope.p); } }, null, // Dividier { text: 'Manage Profiles', click: function ($itemScope) { locationUtils.navigateToPath('/parameters/' + $itemScope.p.id + '/profiles'); } } ]; $scope.editParameter = function(id) { locationUtils.navigateToPath('/parameters/' + id); }; $scope.createParameter = function() { locationUtils.navigateToPath('/parameters/new'); }; $scope.refresh = function() { $state.reload(); // reloads all the resolves for the view }; $scope.toggleVisibility = function(colName) { const col = parametersTable.column(colName + ':name'); col.visible(!col.visible()); parametersTable.rows().invalidate().draw(); }; $scope.columnFilterFn = function(column) { if (column.name === 'Action') { return false; } return true; }; $scope.show = function (colName) { if (colName === "Comment") { return propertiesModel.properties.parameters.comment.show; } return true; } angular.element(document).ready(function () { parametersTable = $('#parametersTable').DataTable({ "aLengthMenu": [[25, 50, 100, -1], [25, 50, 100, "All"]], "iDisplayLength": 25, "aaSorting": [], "columnDefs": [ { "width": "50%", "targets": 2 } ], "columns": $scope.columns, "initComplete": function(settings, json) { try { // need to create the show/hide column checkboxes and bind to the current visibility $scope.columns = JSON.parse(localStorage.getItem('DataTables_parametersTable_/')).columns; } catch (e) { console.error("Failure to retrieve required column info from localStorage (key=DataTables_parametersTable_/):", e); } } }); }); }; TableParametersController.$inject = ['parameters', '$scope', '$state', '$uibModal', '$window', 'locationUtils', 'parameterService', 'profileService', 'messageModel', 'propertiesModel']; module.exports = TableParametersController;