forked from patternfly/angular-patternfly
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfilter-results-component.js
96 lines (85 loc) · 3.32 KB
/
filter-results-component.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/**
* @ngdoc directive
* @name patternfly.filters.component:pfFilterResults
* @restrict E
*
* @description
* Component for the filter results
* <br><br>
*
* @param {object} config configuration settings for the filter results:<br/>
* <ul style='list-style-type: none'>
* <li>.fields - (Array) List of filterable fields containing:
* <ul style='list-style-type: none'>
* <li>.id - (String) Optional unique Id for the filter field, useful for comparisons
* <li>.title - (String) The title to display for the filter field
* <li>.placeholder - (String) Text to display when no filter value has been entered
* <li>.filterType - (String) The filter input field type (any html input type, or 'select' for a select box)
* <li>.filterValues - (Array) List of valid select values used when filterType is 'select'
* </ul>
* <li>.appliedFilters - (Array) List of the currently applied filters
* <li>.resultsCount - (int) The number of results returned after the current applied filters have been applied
* <li>.selectedCount - (int) The number selected items, The 'n' in the label: 'n' of 'm' selected
* <li>.totalCount - (int) The total number of items before any filters have been applied. The 'm' in the label: 'n' of 'm' selected
* <li>.showTotalCountResults - (Boolean) Optional, flag to show the total count in the filter results (ie. x of y Results)
* <li>.itemsLabel - (String) Optional label to use for the items (default: Result)
* <li>.itemsLabelPlural - (String) Optional label to use for the items when plural (default: Results)
* <li>.onFilterChange - ( function(array of filters) ) Function to call when the applied filters list changes
* </ul>
*
*/
angular.module('patternfly.filters').component('pfFilterResults', {
bindings: {
config: '='
},
templateUrl: 'filters/simple-filter/filter-results.html',
controller: function () {
'use strict';
var ctrl = this;
var prevConfig;
ctrl.$onInit = function () {
angular.extend(ctrl, {
clearFilter: clearFilter,
clearAllFilters: clearAllFilters
});
};
ctrl.$onChanges = function () {
setupConfig ();
};
ctrl.$doCheck = function () {
// do a deep compare on config
if (!angular.equals(ctrl.config, prevConfig)) {
setupConfig();
}
};
function setupConfig () {
prevConfig = angular.copy(ctrl.config);
if (!ctrl.config.appliedFilters) {
ctrl.config.appliedFilters = [];
}
if (ctrl.config.resultsCount === undefined) {
ctrl.config.resultsCount = 0;
}
ctrl.config.itemsLabel = ctrl.config.itemsLabel || 'Result';
ctrl.config.itemsLabelPlural = ctrl.config.itemsLabelPlural || 'Results';
}
function clearFilter (item) {
var newFilters = [];
ctrl.config.appliedFilters.forEach(function (filter) {
if (item.title !== filter.title || item.value !== filter.value) {
newFilters.push(filter);
}
});
ctrl.config.appliedFilters = newFilters;
if (ctrl.config.onFilterChange) {
ctrl.config.onFilterChange(ctrl.config.appliedFilters);
}
}
function clearAllFilters () {
ctrl.config.appliedFilters = [];
if (ctrl.config.onFilterChange) {
ctrl.config.onFilterChange(ctrl.config.appliedFilters);
}
}
}
});