From ae956c3ba7593ccd33138d455dd130704fc69eb5 Mon Sep 17 00:00:00 2001 From: Francois Zaninotto Date: Wed, 16 Sep 2015 14:17:42 +0200 Subject: [PATCH] Fix default filter glotch Closes #685 --- .../Crud/list/ListLayoutController.js | 21 ++++++++++----- src/javascripts/ng-admin/Crud/routing.js | 26 +++++++++---------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/javascripts/ng-admin/Crud/list/ListLayoutController.js b/src/javascripts/ng-admin/Crud/list/ListLayoutController.js index d42d256e..d029d582 100644 --- a/src/javascripts/ng-admin/Crud/list/ListLayoutController.js +++ b/src/javascripts/ng-admin/Crud/list/ListLayoutController.js @@ -14,8 +14,12 @@ var ListLayoutController = function ($scope, $stateParams, $state, $location, $t // the controller doesn't change when the search changes // so we must update filter values manually when the location changes $scope.$watch( - () => $location.search() && $location.search().search, - newValues => this.search = $location.search().search ? JSON.parse($location.search().search) : {} + () => $location.search() && $location.search().search , + (newval, oldval) => { + if (newval === oldval) return; + this.search = $location.search().search ? JSON.parse($location.search().search) : {}; + this.enabledFilters = this.getEnabledFilters(); + } ); // apply filters when filter values change $scope.$watch( @@ -28,10 +32,7 @@ var ListLayoutController = function ($scope, $stateParams, $state, $location, $t true ); this.filters = view.filters(); - this.enabledFilters = this.filters.filter(filter => { - if (filter.pinned()) return true; - return this.search && (filter.name() in this.search) - }); + this.enabledFilters = this.getEnabledFilters(); this.hasFilters = Object.keys(this.filters).length > 0; this.focusedFilterId = null; this.enableFilter = this.enableFilter.bind(this); @@ -58,6 +59,13 @@ ListLayoutController.prototype.enableFilter = function (filter) { }, 200, false); } +ListLayoutController.prototype.getEnabledFilters = function () { + return this.filters.filter(filter => { + if (filter.pinned()) return true; + return this.search && (filter.name() in this.search) + }); +} + ListLayoutController.prototype.updateFilters = function () { var values = {}, filters = this.enabledFilters, @@ -77,7 +85,6 @@ ListLayoutController.prototype.updateFilters = function () { values[fieldName] = this.search[fieldName]; } } - this.$stateParams.search = values; this.$stateParams.page = 1; this.$state.go('list', this.$stateParams); diff --git a/src/javascripts/ng-admin/Crud/routing.js b/src/javascripts/ng-admin/Crud/routing.js index 807700f0..f752e1b0 100644 --- a/src/javascripts/ng-admin/Crud/routing.js +++ b/src/javascripts/ng-admin/Crud/routing.js @@ -79,10 +79,10 @@ function routing($stateProvider) { } }) .state('list', { - url: '?{search:json}&page&sortField&sortDir', + url: '?{search:json}&{page:int}&sortField&sortDir', params: { - page: null, - search: null, + page: { value: 1, squash: true }, + search: { value: {}, squash: true }, sortField: null, sortDir: null }, @@ -156,8 +156,8 @@ function routing($stateProvider) { params: { entity: null, id: null, - page: null, - search: null, + page: { value: 1, squash: true }, + search: { value: {}, squash: true }, sortField: null, sortDir: null }, @@ -233,8 +233,8 @@ function routing($stateProvider) { controllerAs: 'formController', templateProvider: templateProvider('CreateView', createTemplate), params: { - page: null, - search: null, + page: { value: 1, squash: true }, + search: { value: {}, squash: true }, sortField: null, sortDir: null }, @@ -283,8 +283,8 @@ function routing($stateProvider) { params: { entity: null, id: null, - page: null, - search: null, + page: { value: 1, squash: true }, + search: { value: {}, squash: true }, sortField: null, sortDir: null }, @@ -387,8 +387,8 @@ function routing($stateProvider) { controllerAs: 'deleteController', templateProvider: templateProvider('DeleteView', deleteTemplate), params: { - page: null, - search: null, + page: { value: 1, squash: true }, + search: { value: {}, squash: true }, sortField: null, sortDir: null }, @@ -417,8 +417,8 @@ function routing($stateProvider) { params: { entity: null, ids: [], - page: null, - search: null, + page: { value: 1, squash: true }, + search: { value: {}, squash: true }, sortField: null, sortDir: null },