diff --git a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee index 5e32a602d2..9620ce49d8 100644 --- a/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee +++ b/app/assets/javascripts/admin/orders/controllers/orders_controller.js.coffee @@ -1,4 +1,4 @@ -angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, RequestMonitor, Orders, SortOptions, $window, $filter, $location, QueryPersistence) -> +angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, RequestMonitor, Orders, SortOptions, $window, $filter, $location, KeyValueMapStore) -> $scope.RequestMonitor = RequestMonitor $scope.pagination = Orders.pagination $scope.orders = Orders.all @@ -15,11 +15,11 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, Reque $scope.poll = 0 $scope.rowStatus = {} - QueryPersistence.storageKey = 'ordersFilters' - QueryPersistence.storableFilters = ["q", "sorting", "page", "per_page"] + KeyValueMapStore.localStorageKey = 'ordersFilters' + KeyValueMapStore.storableKeys = ["q", "sorting", "page", "per_page"] $scope.initialise = -> - unless QueryPersistence.restoreFilters($scope) + unless KeyValueMapStore.restoreValues($scope) $scope.setDefaults() $scope.fetchResults() @@ -31,7 +31,7 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, Reque } $scope.clearFilters = () -> - QueryPersistence.clearFilters() + KeyValueMapStore.clearKeyValueMap() $scope.setDefaults() $scope.fetchResults() @@ -57,7 +57,7 @@ angular.module("admin.orders").controller "ordersCtrl", ($scope, $timeout, Reque per_page: $scope.per_page, page: page } - QueryPersistence.setStoredFilters($scope) + KeyValueMapStore.setStoredValues($scope) RequestMonitor.load(Orders.index(params).$promise) $scope.appendStringIfNotEmpty = (baseString, stringToAppend) -> diff --git a/app/assets/javascripts/admin/services/key_value_map_store.js.coffee b/app/assets/javascripts/admin/services/key_value_map_store.js.coffee new file mode 100644 index 0000000000..1547aaab43 --- /dev/null +++ b/app/assets/javascripts/admin/services/key_value_map_store.js.coffee @@ -0,0 +1,29 @@ +angular.module("admin.indexUtils").factory 'KeyValueMapStore', (localStorageService)-> + new class KeyValueMapStore + localStorageKey: '' + storableKeys: [] + + constructor: -> + localStorageService.setStorageType("sessionStorage") + + getStoredKeyValueMap: -> + localStorageService.get(@localStorageKey) || {} + + setStoredValues: (source) -> + keyValueMap = {} + for key in @storableKeys + keyValueMap[key] = source[key] + localStorageService.set(@localStorageKey, keyValueMap) + + restoreValues: (target) -> + storedKeyValueMap = @getStoredKeyValueMap() + + return false if _.isEmpty(storedKeyValueMap) + + for k,v of storedKeyValueMap + target[k] = v + + return true + + clearKeyValueMap: () -> + localStorageService.remove(@localStorageKey) diff --git a/app/assets/javascripts/admin/services/query_persistence.js.coffee b/app/assets/javascripts/admin/services/query_persistence.js.coffee deleted file mode 100644 index 0018151e42..0000000000 --- a/app/assets/javascripts/admin/services/query_persistence.js.coffee +++ /dev/null @@ -1,30 +0,0 @@ -angular.module("admin.indexUtils").factory 'QueryPersistence', (localStorageService)-> - new class QueryPersistence - storageKey: '' - storableFilters: [] - - constructor: -> - localStorageService.setStorageType("sessionStorage") - - getStoredFilters: -> - localStorageService.get(@storageKey) || {} - - setStoredFilters: (scope) -> - filters = {} - for key in @storableFilters - filters[key] = scope[key] - localStorageService.set(@storageKey, filters) - - restoreFilters: (scope) -> - storedFilters = @getStoredFilters() - - unless _.isEmpty(storedFilters) - for k,v of storedFilters - scope[k] = v - - return true - - false - - clearFilters: () -> - localStorageService.remove(@storageKey) diff --git a/spec/javascripts/unit/admin/services/key_value_map_store_spec.js.coffee b/spec/javascripts/unit/admin/services/key_value_map_store_spec.js.coffee new file mode 100644 index 0000000000..9d853f7f7a --- /dev/null +++ b/spec/javascripts/unit/admin/services/key_value_map_store_spec.js.coffee @@ -0,0 +1,38 @@ +describe "Test KeyValueMapStore service", -> + + KeyValueMapStore = null + + beforeEach -> + module "ofn.admin" + + beforeEach inject (_KeyValueMapStore_) -> + KeyValueMapStore = _KeyValueMapStore_ + + it "set and restore filters", -> + KeyValueMapStore.localStorageKey = 'localStorageKey' + KeyValueMapStore.storableKeys = ["a", "b", "c"] + source = + a: "1", + b: "2", + d: "4" + KeyValueMapStore.setStoredValues(source) + source = {} + restored = KeyValueMapStore.restoreValues(source) + expect(restored).toEqual true + expect(source).toEqual {a: '1', b: '2'} + + it "clear filters", -> + KeyValueMapStore.storageKey = 'localStorageKey' + KeyValueMapStore.storableFilters = ["a", "b", "c"] + source = + a: "1", + b: "2", + d: "4" + KeyValueMapStore.setStoredValues(source) + KeyValueMapStore.clearKeyValueMap() + source = {} + restored = KeyValueMapStore.restoreValues(source) + expect(restored).toEqual false + expect(source).toEqual {} + +