diff --git a/app/scripts/controllers/builds.js b/app/scripts/controllers/builds.js index d9d4c2fd40..ac855828fe 100644 --- a/app/scripts/controllers/builds.js +++ b/app/scripts/controllers/builds.js @@ -24,9 +24,10 @@ angular.module('openshiftConsole') $scope.unfilteredBuildConfigs = {}; $scope.buildConfigs = undefined; $scope.labelSuggestions = {}; - $scope.alerts = $scope.alerts || {}; - $scope.emptyMessage = "Loading..."; $scope.latestByConfig = {}; + $scope.clearFilter = function() { + LabelFilter.clear(); + }; var buildConfigForBuild = $filter('buildConfigForBuild'); @@ -43,9 +44,9 @@ angular.module('openshiftConsole') var isPipeline = $filter('isJenkinsPipelineStrategy'); watches.push(DataService.watch(buildsVersion, context, function(builds) { + $scope.buildsLoaded = true; // Filter out pipeline builds, which have a separate page. $scope.builds = _.omitBy(builds.by("metadata.name"), isPipeline); - $scope.emptyMessage = "No builds to show"; associateBuildsToBuildConfig(); LabelFilter.addLabelSuggestionsFromResources($scope.builds, $scope.labelSuggestions); @@ -59,7 +60,7 @@ angular.module('openshiftConsole') LabelFilter.setLabelSuggestions($scope.labelSuggestions); $scope.buildConfigs = LabelFilter.getLabelSelector().select($scope.unfilteredBuildConfigs); associateBuildsToBuildConfig(); - updateFilterWarning(); + updateFilterMessage(); Logger.log("buildconfigs (subscribe)", $scope.buildConfigs); })); @@ -113,27 +114,17 @@ angular.module('openshiftConsole') }); } - function updateFilterWarning() { + function updateFilterMessage() { var visibleBuilds = _.omitBy($scope.latestByConfig, _.isNull); - if (!LabelFilter.getLabelSelector().isEmpty() && - _.isEmpty($scope.buildConfigs) && - _.isEmpty(visibleBuilds)) { - $scope.alerts["builds"] = { - type: "warning", - details: "The active filters are hiding all builds." - }; - } - else { - delete $scope.alerts["builds"]; - } + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.buildConfigs) && _.isEmpty(visibleBuilds); } LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop - $scope.$apply(function() { + $scope.$evalAsync(function() { $scope.buildConfigs = labelSelector.select($scope.unfilteredBuildConfigs); associateBuildsToBuildConfig(); - updateFilterWarning(); + updateFilterMessage(); }); }); diff --git a/app/scripts/controllers/configMaps.js b/app/scripts/controllers/configMaps.js index d72aef0133..4c33c6448e 100644 --- a/app/scripts/controllers/configMaps.js +++ b/app/scripts/controllers/configMaps.js @@ -16,24 +16,17 @@ angular.module('openshiftConsole') LabelFilter, ProjectsService) { $scope.projectName = $routeParams.project; - $scope.alerts = $scope.alerts || {}; $scope.loaded = false; $scope.labelSuggestions = {}; $scope.configMapsVersion = APIService.getPreferredVersion('configmaps'); + $scope.clearFilter = function () { + LabelFilter.clear(); + }; var watches = []; var configMaps; - var updateFilterWarning = function() { - if (!LabelFilter.getLabelSelector().isEmpty() && - _.isEmpty($scope.configMaps) && - !_.isEmpty(configMaps)) { - $scope.alerts["config-maps"] = { - type: "warning", - details: "The active filters are hiding all config maps." - }; - } else { - delete $scope.alerts["config-maps"]; - } + var updateFilterMessage = function() { + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.configMaps) && !_.isEmpty(configMaps); }; var updateLabelSuggestions = function() { @@ -44,7 +37,7 @@ angular.module('openshiftConsole') var updateConfigMaps = function() { var filteredConfigMaps = LabelFilter.getLabelSelector().select(configMaps); $scope.configMaps = _.sortBy(filteredConfigMaps, 'metadata.name'); - updateFilterWarning(); + updateFilterMessage(); }; ProjectsService @@ -60,7 +53,7 @@ angular.module('openshiftConsole') })); LabelFilter.onActiveFiltersChanged(function() { - $scope.$apply(updateConfigMaps); + $scope.$evalAsync(updateConfigMaps); }); $scope.$on('$destroy', function(){ diff --git a/app/scripts/controllers/deployments.js b/app/scripts/controllers/deployments.js index 6120536278..1f1923d92c 100644 --- a/app/scripts/controllers/deployments.js +++ b/app/scripts/controllers/deployments.js @@ -24,11 +24,14 @@ angular.module('openshiftConsole') $scope.unfilteredDeployments = {}; $scope.replicationControllersByDC = {}; $scope.labelSuggestions = {}; - $scope.alerts = $scope.alerts || {}; $scope.emptyMessage = "Loading..."; $scope.expandedDeploymentConfigRow = {}; $scope.unfilteredReplicaSets = {}; $scope.unfilteredReplicationControllers = {}; + $scope.showEmptyState = true; + $scope.clearFilter = function() { + LabelFilter.clear(); + }; var replicaSets, deploymentsByUID; var annotation = $filter('annotation'); @@ -38,6 +41,26 @@ angular.module('openshiftConsole') var replicationControllersVersion = APIService.getPreferredVersion('replicationcontrollers'); var replicaSetsVersion = APIService.getPreferredVersion('replicasets'); + function updateFilterMessage() { + + var unfilteredDeploymentsEmpty = + _.isEmpty($scope.unfilteredDeploymentConfigs) && + _.isEmpty($scope.unfilteredReplicationControllers) && + _.isEmpty($scope.unfilteredDeployments) && + _.isEmpty($scope.unfilteredReplicaSets); + + var isFiltering = !LabelFilter.getLabelSelector().isEmpty(); + + var filteredDeploymentsEmpty = + _.isEmpty($scope.deploymentConfigs) && + _.isEmpty($scope.replicationControllersByDC['']) && + _.isEmpty($scope.deployments) && + _.isEmpty($scope.replicaSets); + + $scope.showEmptyState = unfilteredDeploymentsEmpty; + $scope.filterWithZeroResults = isFiltering && filteredDeploymentsEmpty && !unfilteredDeploymentsEmpty; + } + var groupReplicaSets = function() { if (!replicaSets || !deploymentsByUID) { return; @@ -58,6 +81,7 @@ angular.module('openshiftConsole') $scope.latestReplicaSetByDeploymentUID[deploymentUID] = DeploymentsService.getActiveReplicaSet(replicaSets, deploymentsByUID[deploymentUID]); }); + updateFilterMessage(); }; var watches = []; @@ -82,7 +106,7 @@ angular.module('openshiftConsole') LabelFilter.setLabelSuggestions($scope.labelSuggestions); $scope.replicationControllersByDC[''] = LabelFilter.getLabelSelector().select($scope.replicationControllersByDC['']); } - updateFilterWarning(); + updateFilterMessage(); if (!action) { // Loading of the page that will create deploymentConfigDeploymentsInProgress structure, which will associate running deployment to his deploymentConfig. @@ -121,6 +145,7 @@ angular.module('openshiftConsole') })); watches.push(DataService.watch(deploymentConfigsVersion, context, function(deploymentConfigs) { + $scope.deploymentConfigsLoaded = true; $scope.unfilteredDeploymentConfigs = deploymentConfigs.by("metadata.name"); LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredDeploymentConfigs, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); @@ -131,7 +156,7 @@ angular.module('openshiftConsole') $scope.unfilteredReplicationControllers = $scope.replicationControllersByDC['']; $scope.replicationControllersByDC[''] = LabelFilter.getLabelSelector().select($scope.replicationControllersByDC['']); } - updateFilterWarning(); + updateFilterMessage(); Logger.log("deploymentconfigs (subscribe)", $scope.deploymentConfigs); })); @@ -144,54 +169,15 @@ angular.module('openshiftConsole') Logger.log("deployments (subscribe)", $scope.unfilteredDeployments); })); - function updateFilterWarning() { - var isFiltering = !LabelFilter.getLabelSelector().isEmpty(); - if (!isFiltering) { - delete $scope.alerts["deployments"]; - return; - } - - var unfilteredDeploymentsEmpty = - _.isEmpty($scope.unfilteredDeploymentConfigs) && - _.isEmpty($scope.unfilteredReplicationControllers) && - _.isEmpty($scope.unfilteredDeployments) && - _.isEmpty($scope.unfilteredReplicaSets); - if (unfilteredDeploymentsEmpty) { - delete $scope.alerts["deployments"]; - return; - } - - var filteredDeploymentsEmpty = - _.isEmpty($scope.deploymentConfigs) && - _.isEmpty($scope.replicationControllersByDC['']) && - _.isEmpty($scope.deployments) && - _.isEmpty($scope.replicaSets); - if (!filteredDeploymentsEmpty) { - delete $scope.alerts["deployments"]; - return; - } - - $scope.alerts["deployments"] = { - type: "warning", - details: "The active filters are hiding all deployments." - }; - } - - $scope.showEmptyMessage = function() { - if ($filter('hashSize')($scope.replicationControllersByDC) === 0) { - return true; - } - - if ($filter('hashSize')($scope.replicationControllersByDC) === 1 && $scope.replicationControllersByDC['']) { - return true; - } - - return false; + // Does the deployment config table have content? + $scope.showDeploymentConfigTable = function() { + var size = _.size($scope.replicationControllersByDC); + return size > 1 || (size === 1 && !$scope.replicationControllersByDC['']); }; LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop - $scope.$apply(function() { + $scope.$evalAsync(function() { $scope.deploymentConfigs = labelSelector.select($scope.unfilteredDeploymentConfigs); $scope.replicationControllersByDC = DeploymentsService.associateDeploymentsToDeploymentConfig($scope.replicationControllers, $scope.deploymentConfigs, true); if ($scope.replicationControllersByDC['']) { @@ -200,7 +186,7 @@ angular.module('openshiftConsole') } $scope.deployments = labelSelector.select($scope.unfilteredDeployments); $scope.replicaSets = labelSelector.select($scope.unfilteredReplicaSets); - updateFilterWarning(); + updateFilterMessage(); }); }); diff --git a/app/scripts/controllers/images.js b/app/scripts/controllers/images.js index b7ca7a4379..56162c4e11 100644 --- a/app/scripts/controllers/images.js +++ b/app/scripts/controllers/images.js @@ -23,8 +23,9 @@ angular.module('openshiftConsole') $scope.missingStatusTagsByImageStream = {}; $scope.builds = {}; $scope.labelSuggestions = {}; - $scope.alerts = $scope.alerts || {}; - $scope.emptyMessage = "Loading..."; + $scope.clearFilter = function() { + LabelFilter.clear(); + }; var imageStreamsVersion = APIService.getPreferredVersion('imagestreams'); @@ -35,13 +36,13 @@ angular.module('openshiftConsole') .then(_.spread(function(project, context) { $scope.project = project; watches.push(DataService.watch(imageStreamsVersion, context, function(imageStreams) { + $scope.imageStreamsLoaded = true; $scope.unfilteredImageStreams = imageStreams.by("metadata.name"); LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredImageStreams, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); $scope.imageStreams = LabelFilter.getLabelSelector().select($scope.unfilteredImageStreams); - $scope.emptyMessage = "No image streams to show"; updateMissingStatusTags(); - updateFilterWarning(); + updateFilterMessage(); Logger.log("image streams (subscribe)", $scope.imageStreams); })); @@ -71,23 +72,15 @@ angular.module('openshiftConsole') }); } - function updateFilterWarning() { - if (!LabelFilter.getLabelSelector().isEmpty() && $.isEmptyObject($scope.imageStreams) && !$.isEmptyObject($scope.unfilteredImageStreams)) { - $scope.alerts["imageStreams"] = { - type: "warning", - details: "The active filters are hiding all image streams." - }; - } - else { - delete $scope.alerts["imageStreams"]; - } + function updateFilterMessage() { + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.imageStreams) && !_.isEmpty($scope.unfilteredImageStreams); } LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop - $scope.$apply(function() { + $scope.$evalAsync(function() { $scope.imageStreams = labelSelector.select($scope.unfilteredImageStreams); - updateFilterWarning(); + updateFilterMessage(); }); }); diff --git a/app/scripts/controllers/otherResources.js b/app/scripts/controllers/otherResources.js index c715cb0135..1869df3d9e 100644 --- a/app/scripts/controllers/otherResources.js +++ b/app/scripts/controllers/otherResources.js @@ -14,8 +14,6 @@ angular.module('openshiftConsole') APIService) { $scope.projectName = $routeParams.project; $scope.labelSuggestions = {}; - $scope.alerts = $scope.alerts || {}; - $scope.emptyMessage = "Select a resource from the list above ..."; $scope.kindSelector = {disabled: true}; $scope.kinds = _.filter(APIService.availableKinds(), function(kind) { switch (kind.kind) { @@ -47,6 +45,9 @@ angular.module('openshiftConsole') return true; } }); + $scope.clearFilter = function () { + LabelFilter.clear(); + }; var isListable = function(kind) { if(!kind) { @@ -125,16 +126,8 @@ angular.module('openshiftConsole') } })); - function updateFilterWarning() { - if (!LabelFilter.getLabelSelector().isEmpty() && $.isEmptyObject($scope.resources) && !$.isEmptyObject($scope.unfilteredResources)) { - $scope.alerts["resources"] = { - type: "warning", - details: "The active filters are hiding all " + APIService.kindToResource($scope.kindSelector.selected.kind, true) + "." - }; - } - else { - delete $scope.alerts["resources"]; - } + function updateFilterMessage() { + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.resources) && !_.isEmpty($scope.unfilteredResources); } function loadKind() { @@ -158,13 +151,13 @@ angular.module('openshiftConsole') LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredResources, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); $scope.resources = LabelFilter.getLabelSelector().select($scope.unfilteredResources); - $scope.emptyMessage = "No " + APIService.kindToResource(selected.kind, true) + " to show"; - updateFilterWarning(); + $scope.resourceName = APIService.kindToResource(selected.kind, true); + updateFilterMessage(); }); } $scope.loadKind = loadKind; $scope.$watch("kindSelector.selected", function() { - $scope.alerts = {}; + LabelFilter.clear(); loadKind(); }); @@ -175,9 +168,9 @@ angular.module('openshiftConsole') LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop - $scope.$apply(function() { + $scope.$evalAsync(function() { $scope.resources = labelSelector.select($scope.unfilteredResources); - updateFilterWarning(); + updateFilterMessage(); }); }); }); diff --git a/app/scripts/controllers/pods.js b/app/scripts/controllers/pods.js index df16f54f20..c9f512b950 100644 --- a/app/scripts/controllers/pods.js +++ b/app/scripts/controllers/pods.js @@ -17,9 +17,9 @@ angular.module('openshiftConsole') // $scope.imagesByDockerReference = {}; // $scope.imageStreamImageRefByDockerReference = {}; // lets us determine if a particular container's docker image reference belongs to an imageStream $scope.labelSuggestions = {}; - $scope.alerts = $scope.alerts || {}; - $scope.emptyMessage = "Loading..."; - + $scope.clearFilter = function() { + LabelFilter.clear(); + }; var watches = []; ProjectsService @@ -27,14 +27,14 @@ angular.module('openshiftConsole') .then(_.spread(function(project, context) { $scope.project = project; watches.push(DataService.watch("pods", context, function(pods) { + $scope.podsLoaded = true; $scope.unfilteredPods = pods.by("metadata.name"); $scope.pods = LabelFilter.getLabelSelector().select($scope.unfilteredPods); - $scope.emptyMessage = "No pods to show"; // TODO should we add links to the image streams the pod is using //ImageStreamResolver.fetchReferencedImageStreamImages($scope.pods, $scope.imagesByDockerReference, $scope.imageStreamImageRefByDockerReference, $scope); LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredPods, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); - updateFilterWarning(); + updateFilterMessage(); Logger.log("pods (subscribe)", $scope.unfilteredPods); })); @@ -47,23 +47,15 @@ angular.module('openshiftConsole') // Logger.log("imagestreams (subscribe)", $scope.imageStreams); // })); - function updateFilterWarning() { - if (!LabelFilter.getLabelSelector().isEmpty() && $.isEmptyObject($scope.pods) && !$.isEmptyObject($scope.unfilteredPods)) { - $scope.alerts["pods"] = { - type: "warning", - details: "The active filters are hiding all pods." - }; - } - else { - delete $scope.alerts["pods"]; - } + function updateFilterMessage() { + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.pods) && !_.isEmpty($scope.unfilteredPods); } LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop - $scope.$apply(function() { + $scope.$evalAsync(function() { $scope.pods = labelSelector.select($scope.unfilteredPods); - updateFilterWarning(); + updateFilterMessage(); }); }); diff --git a/app/scripts/controllers/routes.js b/app/scripts/controllers/routes.js index ae58b00445..a530898721 100644 --- a/app/scripts/controllers/routes.js +++ b/app/scripts/controllers/routes.js @@ -13,8 +13,9 @@ angular.module('openshiftConsole') $scope.unfilteredRoutes = {}; $scope.routes = {}; $scope.labelSuggestions = {}; - $scope.alerts = $scope.alerts || {}; - $scope.emptyMessage = "Loading..."; + $scope.clearFilter = function() { + LabelFilter.clear(); + }; var watches = []; @@ -23,12 +24,12 @@ angular.module('openshiftConsole') .then(_.spread(function(project, context) { $scope.project = project; watches.push(DataService.watch("routes", context, function(routes) { + $scope.routesLoaded = true; $scope.unfilteredRoutes = routes.by("metadata.name"); LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredRoutes, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); $scope.routes = LabelFilter.getLabelSelector().select($scope.unfilteredRoutes); - $scope.emptyMessage = "No routes to show"; - updateFilterWarning(); + updateFilterMessage(); })); // Watch services to display route warnings. @@ -36,23 +37,15 @@ angular.module('openshiftConsole') $scope.services = services.by("metadata.name"); })); - function updateFilterWarning() { - if (!LabelFilter.getLabelSelector().isEmpty() && $.isEmptyObject($scope.routes) && !$.isEmptyObject($scope.unfilteredRoutes)) { - $scope.alerts["routes"] = { - type: "warning", - details: "The active filters are hiding all routes." - }; - } - else { - delete $scope.alerts["routes"]; - } + function updateFilterMessage() { + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.routes) && !_.isEmpty($scope.unfilteredRoutes); } LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop - $scope.$apply(function() { + $scope.$evalAsync(function() { $scope.routes = labelSelector.select($scope.unfilteredRoutes); - updateFilterWarning(); + updateFilterMessage(); }); }); diff --git a/app/scripts/controllers/secrets.js b/app/scripts/controllers/secrets.js index 66f19b13b2..c4fba463c6 100644 --- a/app/scripts/controllers/secrets.js +++ b/app/scripts/controllers/secrets.js @@ -11,7 +11,6 @@ angular.module('openshiftConsole') .controller('SecretsController', function ($routeParams, $scope, DataService, ProjectsService) { $scope.projectName = $routeParams.project; $scope.secretsByType = {}; - $scope.alerts = $scope.alerts || {}; ProjectsService .get($routeParams.project) diff --git a/app/scripts/controllers/serviceInstances.js b/app/scripts/controllers/serviceInstances.js index 479912f9c5..fbee5bae98 100644 --- a/app/scripts/controllers/serviceInstances.js +++ b/app/scripts/controllers/serviceInstances.js @@ -11,14 +11,15 @@ angular.module('openshiftConsole') LabelFilter, Logger, ProjectsService) { - $scope.alerts = {}; $scope.bindingsByInstanceRef = {}; - $scope.emptyMessage = "Loading..."; $scope.labelSuggestions = {}; $scope.projectName = $routeParams.project; $scope.serviceClasses = {}; $scope.serviceInstances = {}; $scope.unfilteredServiceInstances = {}; + $scope.clearFilter = function() { + LabelFilter.clear(); + }; var watches = []; @@ -49,12 +50,12 @@ angular.module('openshiftConsole') var serviceInstancesVersion = APIService.getPreferredVersion('serviceinstances'); watches.push(DataService.watch(serviceInstancesVersion, context, function(serviceInstances) { - $scope.emptyMessage = "No provisioned services to show"; + $scope.serviceInstancesLoaded = true; $scope.unfilteredServiceInstances = serviceInstances.by('metadata.name'); sortServiceInstances(); updateFilter(); - updateFilterWarning(); + updateFilterMessage(); LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredServiceInstances, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); @@ -69,23 +70,15 @@ angular.module('openshiftConsole') updateFilter(); }); - function updateFilterWarning() { - if (!LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.serviceInstances) && !_.isEmpty($scope.unfilteredServiceInstances)) { - $scope.alerts["all-instances-filtered"] = { - type: "warning", - details: "The active filters are hiding all provisioned services." - }; - } - else { - delete $scope.alerts["all-instances-filtered"]; - } + function updateFilterMessage() { + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.serviceInstances) && !_.isEmpty($scope.unfilteredServiceInstances); } LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop $scope.$evalAsync(function() { $scope.serviceInstances = labelSelector.select($scope.unfilteredServiceInstances); - updateFilterWarning(); + updateFilterMessage(); }); }); diff --git a/app/scripts/controllers/services.js b/app/scripts/controllers/services.js index ad25279384..97e4e15173 100644 --- a/app/scripts/controllers/services.js +++ b/app/scripts/controllers/services.js @@ -15,9 +15,9 @@ angular.module('openshiftConsole') $scope.routesByService = {}; $scope.routes = {}; $scope.labelSuggestions = {}; - $scope.alerts = $scope.alerts || {}; - $scope.emptyMessage = "Loading..."; - $scope.emptyMessageRoutes = "Loading..."; + $scope.clearFilter = function() { + LabelFilter.clear(); + }; var watches = []; @@ -26,33 +26,25 @@ angular.module('openshiftConsole') .then(_.spread(function(project, context) { $scope.project = project; watches.push(DataService.watch("services", context, function(services) { + $scope.servicesLoaded = true; $scope.unfilteredServices = services.by("metadata.name"); LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredServices, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); $scope.services = LabelFilter.getLabelSelector().select($scope.unfilteredServices); - $scope.emptyMessage = "No services to show"; - updateFilterWarning(); + updateFilterMessage(); Logger.log("services (subscribe)", $scope.unfilteredServices); })); - function updateFilterWarning() { - if (!LabelFilter.getLabelSelector().isEmpty() && $.isEmptyObject($scope.services) && !$.isEmptyObject($scope.unfilteredServices)) { - $scope.alerts["services"] = { - type: "warning", - details: "The active filters are hiding all services." - }; - } - else { - delete $scope.alerts["services"]; - } + function updateFilterMessage() { + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.services) && !_.isEmpty($scope.unfilteredServices); } LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop - $scope.$apply(function() { + $scope.$evalAsync(function() { $scope.services = labelSelector.select($scope.unfilteredServices); - updateFilterWarning(); + updateFilterMessage(); }); }); diff --git a/app/scripts/controllers/statefulSets.js b/app/scripts/controllers/statefulSets.js index e44a66eb4c..b5fb927c1c 100644 --- a/app/scripts/controllers/statefulSets.js +++ b/app/scripts/controllers/statefulSets.js @@ -9,8 +9,10 @@ angular.module('openshiftConsole') LabelFilter, PodsService) { $scope.projectName = $routeParams.project; - $scope.alerts = $scope.alerts || {}; $scope.labelSuggestions = {}; + $scope.clearFilter = function() { + LabelFilter.clear(); + }; var watches = []; ProjectsService @@ -30,7 +32,7 @@ angular.module('openshiftConsole') $scope.statefulSets = LabelFilter.getLabelSelector().select($scope.unfilteredStatefulSets); LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredStatefulSets, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); - updateFilterWarning(); + updateFilterMessage(); })); // TODO: 1.6 eliminate this block, we dont actually need pods on this page, @@ -40,23 +42,15 @@ angular.module('openshiftConsole') $scope.podsByOwnerUID = PodsService.groupByOwnerUID($scope.pods); })); - function updateFilterWarning() { - if (!LabelFilter.getLabelSelector().isEmpty() && $.isEmptyObject($scope.statefulSets) && !$.isEmptyObject($scope.unfilteredStatefulSets)) { - $scope.alerts["statefulsets"] = { - type: "warning", - details: "The active filters are hiding all stateful sets." - }; - } - else { - delete $scope.alerts["statefulsets"]; - } + function updateFilterMessage() { + $scope.filterWithZeroResults = !LabelFilter.getLabelSelector().isEmpty() && _.isEmpty($scope.statefulSets) && !_.isEmpty($scope.unfilteredStatefulSets); } LabelFilter.onActiveFiltersChanged(function(labelSelector) { // trigger a digest loop - $scope.$apply(function() { + $scope.$evalAsync(function() { $scope.statefulSets = labelSelector.select($scope.unfilteredStatefulSets); - updateFilterWarning(); + updateFilterMessage(); }); }); diff --git a/app/scripts/controllers/storage.js b/app/scripts/controllers/storage.js index 1dbe2df1fd..1414827ea9 100644 --- a/app/scripts/controllers/storage.js +++ b/app/scripts/controllers/storage.js @@ -15,7 +15,6 @@ angular.module('openshiftConsole') $scope.labelSuggestions = {}; $scope.alerts = $scope.alerts || {}; $scope.outOfClaims = false; - $scope.emptyMessage = "Loading..."; var setOutOfClaimsWarning = function() { var isHidden = AlertMessageService.isAlertPermanentlyHidden("storage-quota-limit-reached", $scope.projectName); @@ -55,11 +54,11 @@ angular.module('openshiftConsole') .then(_.spread(function(project, context) { $scope.project = project; watches.push(DataService.watch("persistentvolumeclaims", context, function(pvcs) { + $scope.pvcsLoaded = true; $scope.unfilteredPVCs = pvcs.by("metadata.name"); LabelFilter.addLabelSuggestionsFromResources($scope.unfilteredPVCs, $scope.labelSuggestions); LabelFilter.setLabelSuggestions($scope.labelSuggestions); $scope.pvcs = LabelFilter.getLabelSelector().select($scope.unfilteredPVCs); - $scope.emptyMessage = "No persistent volume claims to show"; updateFilterWarning(); Logger.log("pvcs (subscribe)", $scope.unfilteredPVCs); })); @@ -70,9 +69,11 @@ angular.module('openshiftConsole') type: "warning", details: "The active filters are hiding all persistent volume claims." }; + $scope.filterWithZeroResults = true; } else { delete $scope.alerts["storage"]; + $scope.filterWithZeroResults = false; } } diff --git a/app/styles/_data-toolbar.less b/app/styles/_data-toolbar.less index b3141e943e..96b551889c 100644 --- a/app/styles/_data-toolbar.less +++ b/app/styles/_data-toolbar.less @@ -56,6 +56,13 @@ margin-bottom: 0; } } + .header-toolbar & { + background-color: @panel-light; + border-bottom: 1px solid @page-header-border-color; + margin: 0 -(@grid-gutter-width / 2); + padding-left: (@grid-gutter-width / 2); + padding-right: (@grid-gutter-width / 2); + } .vertical-divider + .data-toolbar-filter { margin-top: 10px; @media (min-width: @screen-sm-min) { diff --git a/app/styles/_layouts.less b/app/styles/_layouts.less index 95c0a4e9a3..95165040c4 100644 --- a/app/styles/_layouts.less +++ b/app/styles/_layouts.less @@ -2,10 +2,6 @@ // Layouts (substructure) // ------------------------------------ -.header-toolbar { - background-color: @panel-light; - border-bottom: 1px solid @page-header-border-color; -} .layout-pf.layout-pf-fixed { height: 1px; body { diff --git a/app/styles/_overview.less b/app/styles/_overview.less index ad46f73c3a..1f5b9fd4c0 100644 --- a/app/styles/_overview.less +++ b/app/styles/_overview.less @@ -464,6 +464,7 @@ margin-bottom: 30px; } .toolbar-container { + border-bottom: 1px solid @page-header-border-color; padding-bottom: 13px; padding-top: 13px; .surface-shaded(); diff --git a/app/views/browse/config-maps.html b/app/views/browse/config-maps.html index 5a161f4837..a300212e67 100644 --- a/app/views/browse/config-maps.html +++ b/app/views/browse/config-maps.html @@ -2,7 +2,7 @@