mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-03-31 06:31:41 +00:00
Columns service holds a column count and notifies rootscope when it changes
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user