From 862443ed6d16cb6d9fc6eee6783e80d11cfdf9f2 Mon Sep 17 00:00:00 2001 From: Rob Harrington Date: Mon, 31 Jul 2017 13:24:56 +1000 Subject: [PATCH] Add hash navigation to admin Enterprise edit view --- .../controllers/side_menu_controller.js.coffee | 2 +- .../admin/side_menu/services/side_menu.js.coffee | 15 ++++++++++++++- .../side_menu_controller_spec.js.coffee | 3 ++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/assets/javascripts/admin/enterprises/controllers/side_menu_controller.js.coffee b/app/assets/javascripts/admin/enterprises/controllers/side_menu_controller.js.coffee index fa346e100f..c69e109236 100644 --- a/app/assets/javascripts/admin/enterprises/controllers/side_menu_controller.js.coffee +++ b/app/assets/javascripts/admin/enterprises/controllers/side_menu_controller.js.coffee @@ -22,7 +22,7 @@ angular.module("admin.enterprises") { name: 'users', label: t('users'), icon_class: "icon-user" } ] - $scope.select(0) + SideMenu.init() $scope.showItem = (item) -> if item.show? diff --git a/app/assets/javascripts/admin/side_menu/services/side_menu.js.coffee b/app/assets/javascripts/admin/side_menu/services/side_menu.js.coffee index 020f0981d8..4f6fe5ab59 100644 --- a/app/assets/javascripts/admin/side_menu/services/side_menu.js.coffee +++ b/app/assets/javascripts/admin/side_menu/services/side_menu.js.coffee @@ -1,9 +1,21 @@ angular.module("admin.side_menu") - .factory "SideMenu", -> + .factory "SideMenu", ($location) -> new class SideMenu items: [] selected: null + + # Checks for path and uses it to set the view + # If no path, loads first view + init: => + path = $location.path()?.match(/^\/\w+$/)?[0] + index = if path + name = path[1..] + @items.indexOf(@find_by_name(name)) + else + 0 + @select(index) + setItems: (items) => @items = items item.visible = true for item in @items @@ -13,6 +25,7 @@ angular.module("admin.side_menu") @selected.selected = false if @selected @selected = @items[index] @selected.selected = true + $location.path(@selected.name) find_by_name: (name) => for item in @items when item.name is name diff --git a/spec/javascripts/unit/admin/enterprises/controllers/side_menu_controller_spec.js.coffee b/spec/javascripts/unit/admin/enterprises/controllers/side_menu_controller_spec.js.coffee index c4a724a137..c168047ccf 100644 --- a/spec/javascripts/unit/admin/enterprises/controllers/side_menu_controller_spec.js.coffee +++ b/spec/javascripts/unit/admin/enterprises/controllers/side_menu_controller_spec.js.coffee @@ -17,6 +17,7 @@ describe "menuCtrl", -> inject ($rootScope, $controller, _SideMenu_) -> scope = $rootScope SideMenu = _SideMenu_ + spyOn(SideMenu, "init").and.callThrough() spyOn(SideMenu, "select").and.callThrough() spyOn(SideMenu, "setItems").and.callThrough() ctrl = $controller 'sideMenuCtrl', {$scope: scope, enterprise: enterprise, SideMenu: SideMenu, enterprisePermissions: {}} @@ -30,7 +31,7 @@ describe "menuCtrl", -> expect(scope.menu.items).toBe SideMenu.items it "sets the initally selected value", -> - expect(SideMenu.select).toHaveBeenCalledWith 0 + expect(SideMenu.init).toHaveBeenCalled() describe "selecting an item", ->