Initial version of filters on backlog.
parent
210b0db1bb
commit
c43197420a
|
@ -39,6 +39,9 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin)
|
||||||
loadUserstories: ->
|
loadUserstories: ->
|
||||||
return @rs.userstories.listUnassigned(@scope.projectId).then (userstories) =>
|
return @rs.userstories.listUnassigned(@scope.projectId).then (userstories) =>
|
||||||
@scope.userstories = userstories
|
@scope.userstories = userstories
|
||||||
|
@scope.filters = @.generateFilters()
|
||||||
|
|
||||||
|
@.filterVisibleUserstories()
|
||||||
return userstories
|
return userstories
|
||||||
|
|
||||||
loadBacklog: ->
|
loadBacklog: ->
|
||||||
|
@ -64,6 +67,27 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin)
|
||||||
.then(=> @.loadUsersAndRoles())
|
.then(=> @.loadUsersAndRoles())
|
||||||
.then(=> @.loadBacklog())
|
.then(=> @.loadBacklog())
|
||||||
|
|
||||||
|
filterVisibleUserstories: ->
|
||||||
|
selectedTags = _.filter(@scope.filters.tags, "selected")
|
||||||
|
selectedTags = _.map(selectedTags, "name")
|
||||||
|
|
||||||
|
@scope.visibleUserstories = []
|
||||||
|
|
||||||
|
if selectedTags.length == 0
|
||||||
|
@scope.visibleUserstories = _.clone(@scope.userstories, false)
|
||||||
|
else
|
||||||
|
@scope.visibleUserstories = _.reject @scope.userstories, (us) =>
|
||||||
|
if _.intersection(selectedTags, us.tags).length == 0
|
||||||
|
return true
|
||||||
|
else
|
||||||
|
return false
|
||||||
|
|
||||||
|
generateFilters: ->
|
||||||
|
filters = {}
|
||||||
|
plainTags = _.flatten(_.map(@scope.userstories, "tags"))
|
||||||
|
filters.tags = _.map(_.countBy(plainTags), (v, k) -> {name: k, count:v})
|
||||||
|
return filters
|
||||||
|
|
||||||
## Template actions
|
## Template actions
|
||||||
|
|
||||||
deleteUserStory: (us) ->
|
deleteUserStory: (us) ->
|
||||||
|
@ -84,7 +108,6 @@ class BacklogController extends mixOf(taiga.Controller, taiga.PageMixin)
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
BacklogDirective = ($repo) ->
|
BacklogDirective = ($repo) ->
|
||||||
|
|
||||||
#########################
|
#########################
|
||||||
## Drag & Drop Link
|
## Drag & Drop Link
|
||||||
#########################
|
#########################
|
||||||
|
@ -158,13 +181,28 @@ BacklogDirective = ($repo) ->
|
||||||
#########################
|
#########################
|
||||||
|
|
||||||
linkFilters = ($scope, $el, $attrs, $ctrl) ->
|
linkFilters = ($scope, $el, $attrs, $ctrl) ->
|
||||||
console.log "TODO"
|
$scope.filtersSearch = {}
|
||||||
|
$el.on "click", "#show-filters-button", (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
$el.find("sidebar.filters-bar").toggle()
|
||||||
|
|
||||||
|
$el.on "click", "section.filters a.single-filter", (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
target = angular.element(event.currentTarget)
|
||||||
|
targetScope = target.scope()
|
||||||
|
|
||||||
|
$scope.$apply ->
|
||||||
|
targetScope.tag.selected = not (targetScope.tag.selected or false)
|
||||||
|
$ctrl.filterVisibleUserstories()
|
||||||
|
|
||||||
link = ($scope, $el, $attrs) ->
|
link = ($scope, $el, $attrs) ->
|
||||||
$ctrl = $el.controller()
|
$ctrl = $el.controller()
|
||||||
linkSortable($scope, $el, $attrs, $ctrl)
|
linkSortable($scope, $el, $attrs, $ctrl)
|
||||||
linkFilters($scope, $el, $attrs, $ctrl)
|
linkFilters($scope, $el, $attrs, $ctrl)
|
||||||
|
|
||||||
|
$scope.$on "$destroy", ->
|
||||||
|
$el.off()
|
||||||
|
|
||||||
return {link: link}
|
return {link: link}
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
|
@ -15,7 +15,7 @@ block content
|
||||||
a.trans-button(href="", title="Move to Current Sprint")
|
a.trans-button(href="", title="Move to Current Sprint")
|
||||||
span.icon.icon-move
|
span.icon.icon-move
|
||||||
span.text Move to current Sprint
|
span.text Move to current Sprint
|
||||||
a.trans-button(href="", title="Show Filters")
|
a.trans-button(href="", title="Show Filters", id="show-filters-button")
|
||||||
span.icon.icon-filter
|
span.icon.icon-filter
|
||||||
span.text Show Filters
|
span.text Show Filters
|
||||||
a.trans-button(href="", title="Show Tags")
|
a.trans-button(href="", title="Show Tags")
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
div.row.us-item-row(ng-repeat="us in userstories track by us.id")
|
div.row.us-item-row(ng-repeat="us in visibleUserstories track by us.id")
|
||||||
div.user-stories
|
div.user-stories
|
||||||
div.user-story-name
|
div.user-story-name
|
||||||
input(type="checkbox", name="")
|
input(type="checkbox", name="")
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
// Depreacted, should be removed when any
|
||||||
|
// other static template not need it.
|
||||||
a.single-filter(href="", title="filter")
|
a.single-filter(href="", title="filter")
|
||||||
span.name filter
|
span.name filter
|
||||||
span.number 23
|
span.number 23
|
||||||
|
|
|
@ -3,8 +3,10 @@ section.filters
|
||||||
h1 filters
|
h1 filters
|
||||||
form
|
form
|
||||||
fieldset
|
fieldset
|
||||||
input(type="text", placeholder="Filter Filters")
|
input(type="text", placeholder="Filter Filters", ng-model="filtersSearch.$")
|
||||||
a.icon.icon-search(href="", title="search")
|
a.icon.icon-search(href="", title="search")
|
||||||
div.filter-list
|
div.filter-list
|
||||||
- for (var x = 0; x < 10; x++)
|
a.single-filter(ng-repeat="tag in filters.tags|filter:filtersSearch:strict"
|
||||||
include ../components/filter
|
ng-class="{selected: tag.selected}")
|
||||||
|
span.name(tg-bo-html="tag.name")
|
||||||
|
span.number(tg-bo-html="tag.count")
|
||||||
|
|
|
@ -12,6 +12,11 @@
|
||||||
color: $grayer;
|
color: $grayer;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
&.selected {
|
||||||
|
@include transition (opacity .2s linear);
|
||||||
|
color: $grayer;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
.name,
|
.name,
|
||||||
.number {
|
.number {
|
||||||
padding: 8px 10px;
|
padding: 8px 10px;
|
||||||
|
|
Loading…
Reference in New Issue