Columns service holds a column count and notifies rootscope when it changes

This commit is contained in:
Rob Harrington
2015-06-08 11:34:33 +08:00
parent 0c36738472
commit c441c8c6cb
3 changed files with 43 additions and 11 deletions

View File

@@ -1,11 +1,8 @@
angular.module("admin.indexUtils").directive "ofnToggleColumn", ->
angular.module("admin.indexUtils").directive "ofnToggleColumn", (Columns) ->
link: (scope, element, attrs) ->
element.addClass "selected" if scope.column.visible
element.click "click", ->
scope.$apply ->
if scope.column.visible
scope.column.visible = false
element.removeClass "selected"
else
scope.column.visible = true
element.addClass "selected"
Columns.toggleColumn(scope.column)
element.toggleClass "selected"

View File

@@ -1,8 +1,18 @@
angular.module("admin.indexUtils").factory 'Columns', ->
angular.module("admin.indexUtils").factory 'Columns', ($rootScope) ->
new class Columns
columns: {}
visibleCount: 0
setColumns: (columns) ->
setColumns: (columns) =>
@columns = {}
@columns[name] = column for name, column of columns
@calculateVisibleCount()
@columns
toggleColumn: (column) =>
column.visible = !column.visible
@calculateVisibleCount()
calculateVisibleCount: =>
@visibleCount = (column for name, column of @columns when column.visible).length
$rootScope.$broadcast "columnCount:changed", @visibleCount

View File

@@ -7,9 +7,34 @@ describe "Columns service", ->
inject (_Columns_) ->
Columns = _Columns_
Columns.columns = ["something"]
describe "setting columns", ->
it "sets resets @columns and copies each column of the provided object across", ->
Columns.setColumns({ name: { visible: true } })
expect(Columns.columns).toEqual { name: { visible: true } }
it "calls calculateVisibleCount", ->
spyOn(Columns, "calculateVisibleCount")
Columns.setColumns({ name: { visible: true } })
expect(Columns.calculateVisibleCount).toHaveBeenCalled()
describe "toggling a column", ->
it "switches the visibility of the given column", ->
column = { visible: false }
Columns.toggleColumn(column)
expect(column.visible).toBe true
it "calls calculateVisibleCount", ->
spyOn(Columns, "calculateVisibleCount")
Columns.toggleColumn({ visible: false })
expect(Columns.calculateVisibleCount).toHaveBeenCalled()
describe "calculating visibleCount", ->
it "counts the number of columns ", ->
Columns.columns = { col1: { visible: false }, col2: { visible: true }, col3: { visible: true }, col4: { visible: false } }
Columns.calculateVisibleCount()
expect(Columns.visibleCount).toBe 2
it "$broadcasts the updated visible count to $rootScope", inject ($rootScope) ->
spyOn($rootScope, "$broadcast")
Columns.calculateVisibleCount()
expect($rootScope.$broadcast).toHaveBeenCalled()