Skip to content

Commit aafbf89

Browse files
committed
Adding AND and OR operators to certain filters
1 parent 10b1a69 commit aafbf89

File tree

2 files changed

+64
-8
lines changed

2 files changed

+64
-8
lines changed

layouts/patterns/list.json.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,35 @@
1414
{{- range $index, $rh_product := $rh_products.Alphabetical }}
1515
{{- $rh_products_list = $rh_products_list | append (dict "Name" $rh_product.Name "LinkTitle" $rh_product.Page.LinkTitle) }}
1616
{{- end }}
17+
{{- $rh_products_filter_types := slice "AND" "OR" }}
18+
{{- $rh_products_dict := dict "filter_list" $rh_products_list "filter_types" $rh_products_filter_types }}
1719

1820
{{/* Other Products */}}
1921
{{- $other_products := .Site.Taxonomies.other_products }}
2022
{{- $other_products_list := slice }}
2123
{{- range $index, $other_product := $other_products.Alphabetical }}
2224
{{- $other_products_list = $other_products_list | append (dict "Name" $other_product.Name "LinkTitle" $other_product.Page.LinkTitle) }}
2325
{{- end }}
26+
{{- $other_products_filter_types := slice "AND" "OR" }}
27+
{{- $other_products_dict := dict "filter_list" $other_products_list "filter_types" $other_products_filter_types }}
2428

2529
{{/* Industries */}}
2630
{{- $industries := .Site.Taxonomies.industries }}
2731
{{- $industries_list := slice }}
2832
{{- range $index, $industry := $industries.Alphabetical }}
2933
{{- $industries_list = $industries_list | append (dict "Name" $industry.Name "LinkTitle" $industry.Page.LinkTitle) }}
3034
{{- end }}
35+
{{- $industries_filter_types := slice "AND" "OR" }}
36+
{{- $industries_dict := dict "filter_list" $industries_list "filter_types" $industries_filter_types }}
3137

3238
{{/* Tiers */}}
3339
{{- $tiers_list := slice -}}
3440
{{- $tiers_list = $tiers_list | append (dict "Name" "maintained" "LinkTitle" "Maintained") }}
3541
{{- $tiers_list = $tiers_list | append (dict "Name" "tested" "LinkTitle" "Tested") }}
3642
{{- $tiers_list = $tiers_list | append (dict "Name" "sandbox" "LinkTitle" "Sandbox") }}
43+
{{- $tiers_filter_types := slice "OR" }}
44+
{{- $tiers_dict := dict "filter_list" $tiers_list "filter_types" $tiers_filter_types }}
3745

38-
{{- $filter_categories := dict "rh_products" $rh_products_list "other_products" $other_products_list "industries" $industries_list "tier" $tiers_list -}}
46+
{{- $filter_categories := dict "rh_products" $rh_products_dict "other_products" $other_products_dict "industries" $industries_dict "tier" $tiers_dict -}}
3947
{{- dict "patterns" $pattern_list "filter_categories" $filter_categories | jsonify }}
4048
{{- end }}

static/js/patterns-browser-v2.js

Lines changed: 55 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,32 @@ function renderFilterItem(type, name, linkTitle) {
7474
return filterItem;
7575
}
7676

77+
function renderFilterButtons(filterButtonTypes, name) {
78+
if (filterButtonTypes.length > 1) {
79+
var filterButtons = '<div class="pf-c-toggle-group pf-m-compact">';
80+
var firstSelected = "";
81+
for (item = 0; item < filterButtonTypes.length; item++) {
82+
firstSelected = "";
83+
console.log(item)
84+
if (item == 0) { firstSelected = " pf-m-selected"; }
85+
filterButtons += '<div class="pf-c-toggle-group__item">' +
86+
'<button class="pf-c-toggle-group__button' + firstSelected + '" type="button" id="' + name + "_button:" + filterButtonTypes[item].toLowerCase() + '" onclick="changeFilterType(this.id)">' +
87+
'<span class="pf-c-toggle-group__text">' + filterButtonTypes[item] + '</span>' +
88+
'</button>' +
89+
'</div>'
90+
}
91+
filterButtons += '</div>'
92+
return filterButtons;
93+
}
94+
return "";
95+
}
96+
7797
function renderFilter(elementId, filterType, filterData) {
78-
for (item = 0; item < filterData.length; item++) {
79-
const element = document.getElementById(elementId);
80-
element.innerHTML += renderFilterItem(filterType, filterData[item].Name, filterData[item].LinkTitle);
98+
const element = document.getElementById(elementId);
99+
for (item = 0; item < filterData.filter_list.length; item++) {
100+
element.innerHTML += renderFilterItem(filterType, filterData.filter_list[item].Name, filterData.filter_list[item].LinkTitle);
81101
};
102+
element.innerHTML += renderFilterButtons(filterData.filter_types, filterType);
82103
}
83104

84105
function renderLabel(tier) {
@@ -124,14 +145,23 @@ function renderFilteredCards(patterns, filter_categories) {
124145
patternLoaderSpinner.innerHTML = renderSpinner();
125146
var filter = new Object();
126147
var filteredPatterns = [];
148+
var filterType = new Object();
127149
var sortValue = document.getElementById("select-pattern-sort");
128150
for (const [category, terms] of Object.entries(filter_categories)) {
129-
for (item = 0; item < terms.length; item++) {
130-
var checkboxId = category + ":" + cleanString(terms[item].Name);
151+
for (item = 0; item < terms.filter_list.length; item++) {
152+
var checkboxId = category + ":" + cleanString(terms.filter_list[item].Name);
131153
var checkbox = document.getElementById(checkboxId);
132154
if (checkbox.checked) {
133155
if (filter[category] == undefined) { filter[category] = [] };
134-
filter[category].push(terms[item].LinkTitle);
156+
filter[category].push(terms.filter_list[item].LinkTitle);
157+
};
158+
};
159+
for (item = 0; item < terms.filter_types.length; item++) {
160+
var filterTypeID = category + "_button:" + terms.filter_types[item].toLowerCase();
161+
var filterTypeItem = document.getElementById(filterTypeID);
162+
console.log(filterTypeItem)
163+
if (filterTypeItem != null && filterTypeItem.classList.contains("pf-m-selected")) {
164+
filterType[category] = terms.filter_types[item].toLowerCase();
135165
};
136166
};
137167
};
@@ -147,7 +177,9 @@ function renderFilteredCards(patterns, filter_categories) {
147177
} else if (typeof(patterns[item].Params[category]) == "object" && patterns[item].Params[category] != null) {
148178
var patternTerms = patterns[item].Params[category].map(v => v.toLowerCase());
149179
var filterTerms = terms.map(v => v.toLowerCase());
150-
if(filterTerms.every(r => patternTerms.includes(r))) {
180+
if(filterType[category] == "and" && filterTerms.every(r => patternTerms.includes(r))) {
181+
checksPassed[category] = true;
182+
} else if (filterType[category] == "or" && filterTerms.some(r => patternTerms.includes(r))) {
151183
checksPassed[category] = true;
152184
};
153185
};
@@ -190,6 +222,22 @@ function filterSelection(filter) {
190222
});
191223
}
192224

225+
function changeFilterType(id) {
226+
var filterType = id.split(":");
227+
var filter_category = filterType[0].replace('_button','');
228+
const patternsData = getData();
229+
patternsData.then(output => {
230+
for (item = 0; item < output.filter_categories[filter_category].filter_types.length; item++) {
231+
var unselectId = filter_category + "_button:" + output.filter_categories[filter_category].filter_types[item].toLowerCase()
232+
const unselectButton = document.getElementById(unselectId);
233+
unselectButton.classList.remove("pf-m-selected");
234+
}
235+
const selectButton = document.getElementById(id);
236+
selectButton.classList.add("pf-m-selected");
237+
renderFilteredCards(output.patterns, output.filter_categories)
238+
});
239+
}
240+
193241
const patternsData = getData()
194242
patternsData.then(output => {
195243
renderFilter("TiersItems", "tier", output.filter_categories.tier);

0 commit comments

Comments
 (0)