mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-10 23:07:47 +00:00
Rearchitecting the thing
This commit is contained in:
@@ -1,12 +1,4 @@
|
||||
Darkswarm.controller "ProducersCtrl", ($scope, Producers, TaxonSelector, $filter) ->
|
||||
Darkswarm.controller "ProducersCtrl", ($scope, Producers, $filter) ->
|
||||
$scope.Producers = Producers
|
||||
$scope.TaxonSelector = TaxonSelector
|
||||
$scope.filtersActive = false
|
||||
$scope.oldFiltered = []
|
||||
|
||||
$scope.filteredProducers = ->
|
||||
filtered = $filter("filterProducers")(Producers.visible, $scope.query)
|
||||
if $scope.oldFiltered != filtered
|
||||
$scope.oldFiltered = filtered
|
||||
TaxonSelector.collectTaxons filtered
|
||||
filtered
|
||||
$scope.filtersActive = true
|
||||
$scope.activeTaxons = []
|
||||
|
||||
@@ -7,3 +7,4 @@ Darkswarm.directive "activeSelector", ->
|
||||
elem.bind "click", ->
|
||||
scope.$apply ->
|
||||
scope.selector.active = !scope.selector.active
|
||||
scope.emit()
|
||||
|
||||
@@ -1,5 +1,33 @@
|
||||
Darkswarm.directive "taxonSelector", (TaxonSelector) ->
|
||||
Darkswarm.directive "taxonSelector", ->
|
||||
restrict: 'E'
|
||||
scope:
|
||||
objects: "&"
|
||||
results: "="
|
||||
templateUrl: "taxon_selector.html"
|
||||
|
||||
link: (scope, elem, attr)->
|
||||
scope.TaxonSelector = TaxonSelector
|
||||
selectors_by_id = {}
|
||||
selectors = ["foo"]
|
||||
|
||||
scope.emit = ->
|
||||
scope.results = selectors.filter (selector)->
|
||||
selector.active
|
||||
.map (selector)->
|
||||
selector.taxon.id
|
||||
|
||||
scope.selectors = ->
|
||||
console.log "selectoring"
|
||||
taxons = {}
|
||||
selectors = []
|
||||
for object in scope.objects()
|
||||
for taxon in (object.taxons.concat object?.supplied_taxons)
|
||||
taxons[taxon.id] = taxon
|
||||
for id, taxon of taxons
|
||||
if selector = selectors_by_id[id]
|
||||
selectors.push selector
|
||||
else
|
||||
selector = selectors_by_id[id] =
|
||||
active: false
|
||||
taxon: taxon
|
||||
selectors.push selector
|
||||
selectors
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
Darkswarm.factory 'TaxonSelector', ->
|
||||
new class TaxonSelector
|
||||
selectors: []
|
||||
selectors_by_id: {}
|
||||
# Collect all taxons on the supplied enterprises
|
||||
collectTaxons: (enterprises)->
|
||||
taxons = {}
|
||||
@selectors = []
|
||||
selectors = []
|
||||
for enterprise in enterprises
|
||||
for taxon in (enterprise.taxons.concat enterprise.supplied_taxons)
|
||||
taxons[taxon.id] = taxon
|
||||
for id, taxon of taxons
|
||||
if @selectors_by_id[id]
|
||||
selectors.push @selectors_by_id[id]
|
||||
else
|
||||
@selectors_by_id[id] =
|
||||
active: false
|
||||
taxon: taxon
|
||||
selectors.push @selectors_by_id[id]
|
||||
@selectors = selectors
|
||||
|
||||
active: ->
|
||||
@selectors.filter (selector)->
|
||||
selector.active
|
||||
.map (selector)->
|
||||
selector.taxon.id
|
||||
@@ -1,4 +1,4 @@
|
||||
%ul.small-block-grid-4
|
||||
%active-selector{"ng-repeat" => "selector in TaxonSelector.selectors"}
|
||||
%active-selector{"ng-repeat" => "selector in selectors()"}
|
||||
%render-svg{path: "{{selector.taxon.icon}}"}
|
||||
%span {{ selector.taxon.name }}
|
||||
|
||||
@@ -91,8 +91,8 @@
|
||||
.animate-repeat.ng-move,
|
||||
.animate-repeat.ng-enter,
|
||||
.animate-repeat.ng-leave
|
||||
-webkit-transition: all linear 0.5s
|
||||
transition: all linear 0.5s
|
||||
-webkit-transition: all linear 0.2s
|
||||
transition: all linear 0.2s
|
||||
|
||||
.animate-repeat.ng-leave.ng-leave-active,
|
||||
.animate-repeat.ng-move,
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
Something
|
||||
.row.filter-box
|
||||
.small-12.large-6.columns
|
||||
%taxon-selector{enterprises: "Producers.visible"}
|
||||
%taxon-selector{objects: "Producers.visible | filterProducers:query",
|
||||
results: "activeTaxons"}
|
||||
|
||||
.small-12.large-6.columns
|
||||
%shipping-type-selector
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
.active_table
|
||||
%producer.active_table_node.row.animate-repeat{id: "{{producer.path}}",
|
||||
"scroll-after-load" => true,
|
||||
"ng-repeat" => "producer in veryFilteredProducers = (filteredProducers() | taxons:TaxonSelector.active() | shipping:shippingTypes)",
|
||||
"ng-repeat" => "producer in producers = (Producers.visible | filterProducers:query | taxons:activeTaxons | shipping:shippingTypes)",
|
||||
"ng-controller" => "ProducerNodeCtrl",
|
||||
"ng-class" => "{'closed' : !open(), 'open' : open(), 'inactive' : !producer.active}",
|
||||
id: "{{producer.hash}}"}
|
||||
|
||||
Reference in New Issue
Block a user