Skip to content

Commit e0d3e29

Browse files
author
Sergei Aksiutin
committed
[NEP-12629] Fix default filters URLs with old format for SavedSearches.
1 parent 828327a commit e0d3e29

File tree

7 files changed

+267
-126
lines changed

7 files changed

+267
-126
lines changed

dist/react-filterbar.js

Lines changed: 91 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16940,7 +16940,7 @@ var FilterBarActor = /*#__PURE__*/function () {
1694016940
value: function loadSavedSearch(searchId) {
1694116941
this.disableAllFilters();
1694216942
var savedSearch = this.filterBarStore.getSavedSearch(searchId);
16943-
var filters = JSON.parse(savedSearch.configuration);
16943+
var filters = this.parseSavedSearch(savedSearch);
1694416944

1694516945
if (this.verifySavedFilters(filters)) {
1694616946
this.filterBarStore.setActiveFilters(filters);
@@ -16951,21 +16951,29 @@ var FilterBarActor = /*#__PURE__*/function () {
1695116951
}
1695216952
}
1695316953
}, {
16954-
key: "verifySavedFilters",
16955-
value: function verifySavedFilters(filters) {
16956-
var filtersArr;
16954+
key: "parseSavedSearch",
16955+
value: function parseSavedSearch(savedSearch) {
16956+
var savedSearchFilters = JSON.parse(savedSearch.configuration);
16957+
var filters = savedSearchFilters;
1695716958

16958-
if (filters instanceof Array) {
16959-
filtersArr = filters;
16960-
} else {
16961-
filtersArr = Object.keys(filters).map(function (name) {
16959+
if (!Array.isArray(savedSearchFilters)) {
16960+
filters = Object.keys(savedSearchFilters).map(function (name) {
1696216961
return {
1696316962
uid: name
1696416963
};
1696516964
});
1696616965
}
1696716966

16968-
return new _FilterVerificator.FilterVerificator(this.filterBarStore.getFilters(), filtersArr).verify();
16967+
if (!Array.isArray(filters[0])) {
16968+
filters = [filters];
16969+
}
16970+
16971+
return filters;
16972+
}
16973+
}, {
16974+
key: "verifySavedFilters",
16975+
value: function verifySavedFilters(parsedFilters) {
16976+
return new _FilterVerificator.FilterVerificator(this.filterBarStore.getFilters(), parsedFilters).verify();
1696916977
}
1697016978
}, {
1697116979
key: "saveFilters",
@@ -17138,40 +17146,12 @@ function setupConfiguration(configuration) {
1713817146
var activeFilters = JSON.parse(url.query(true).q);
1713917147
configuration.filterBarConfiguration.activeFilters = [];
1714017148

17141-
var _iterator = _createForOfIteratorHelper(activeFilters),
17142-
_step;
17143-
17144-
try {
17145-
var _loop = function _loop() {
17146-
groupFilters = _step.value;
17147-
var _groupFilters = [];
17148-
groupFilters.map(function (filter) {
17149-
var configFilter = configuration.filterBarConfiguration.filters[filter.uid];
17150-
17151-
if (configFilter) {
17152-
configFilter.filterUid = filter.uid;
17153-
configFilter.uid = filter.uid;
17154-
configFilter.value = filter.value;
17155-
17156-
if (filter.operator) {
17157-
configFilter.operator = filter.operator;
17158-
}
17159-
}
17160-
17161-
_groupFilters.push(configFilter);
17162-
});
17163-
configuration.filterBarConfiguration.activeFilters.push(_groupFilters);
17164-
};
17165-
17166-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
17167-
var groupFilters;
17168-
17169-
_loop();
17170-
}
17171-
} catch (err) {
17172-
_iterator.e(err);
17173-
} finally {
17174-
_iterator.f();
17149+
if (Array.isArray(activeFilters[0])) {
17150+
// Case 1: Filters with new format
17151+
configuration.filterBarConfiguration.activeFilters = parseQueryVersion2(activeFilters, configuration);
17152+
} else {
17153+
// Case 2: Filters with old format
17154+
configuration.filterBarConfiguration.activeFilters = parseQueryVersion1(activeFilters, configuration);
1717517155
}
1717617156
}
1717717157

@@ -17187,6 +17167,74 @@ function setupConfiguration(configuration) {
1718717167
return configuration;
1718817168
}
1718917169

17170+
function parseQueryVersion1(activeFilters, configuration) {
17171+
var _groupFilters = [];
17172+
17173+
var _iterator = _createForOfIteratorHelper(activeFilters),
17174+
_step;
17175+
17176+
try {
17177+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
17178+
var filter = _step.value;
17179+
var configFilter = parseAndGetFilter(filter, configuration);
17180+
17181+
_groupFilters.push(configFilter);
17182+
}
17183+
} catch (err) {
17184+
_iterator.e(err);
17185+
} finally {
17186+
_iterator.f();
17187+
}
17188+
17189+
return [_groupFilters];
17190+
}
17191+
17192+
function parseQueryVersion2(activeFilters, configuration) {
17193+
var results = [];
17194+
17195+
var _iterator2 = _createForOfIteratorHelper(activeFilters),
17196+
_step2;
17197+
17198+
try {
17199+
var _loop = function _loop() {
17200+
var groupFilters = _step2.value;
17201+
var _groupFilters = [];
17202+
groupFilters.map(function (filter) {
17203+
var configFilter = parseAndGetFilter(filter, configuration);
17204+
17205+
_groupFilters.push(configFilter);
17206+
});
17207+
results.push(_groupFilters);
17208+
};
17209+
17210+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
17211+
_loop();
17212+
}
17213+
} catch (err) {
17214+
_iterator2.e(err);
17215+
} finally {
17216+
_iterator2.f();
17217+
}
17218+
17219+
return results;
17220+
}
17221+
17222+
function parseAndGetFilter(filter, configuration) {
17223+
var configFilter = configuration.filterBarConfiguration.filters[filter.uid];
17224+
17225+
if (configFilter) {
17226+
configFilter.filterUid = filter.uid;
17227+
configFilter.uid = filter.uid;
17228+
configFilter.value = filter.value;
17229+
17230+
if (filter.operator) {
17231+
configFilter.operator = filter.operator;
17232+
}
17233+
}
17234+
17235+
return configFilter;
17236+
}
17237+
1719017238
document.addEventListener("DOMContentLoaded", function () {
1719117239
var configuration = {},
1719217240
filterableTableNode = document.getElementsByClassName("react-filterable-table")[0];

dist/react-filterbar.min.js

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/public/js/react-filterbar.js

Lines changed: 92 additions & 44 deletions
Large diffs are not rendered by default.

example/saved_search.yml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
---
2-
TEST: "[]"
3-
Book 1: "[]"
4-
Book 10: '[[{"field":"title","type":"text","label":"Title","filterUid":"title","uid":"title","value":"Book
5-
10"}]]'
6-
Title wit OR: '[[{"field":"author","type":"select","label":"Author","url":"/authors","default":"Author
7-
31","filterUid":"author","uid":"author","value":"Author 31"}],[{"field":"title","type":"text","label":"Title","filterUid":"title","uid":"title","value":"Book
2+
New Format: '[[{"field":"title","type":"text","label":"Title","filterUid":"title","uid":"title","value":"Book
83
10"}]]'
4+
Old Format: '[{"uid":"author","type":"select","field":"author","value":"Author 35"},{"uid":"title","type":"text","field":"title","value":"Book
5+
10"}]'

example/server.rb

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,16 @@ def loop_over_queries(queries, haystack)
8181
end
8282

8383
def search(needle, haystack)
84-
field, type, value = needle.first.values_at(*%w(field type value))
84+
field, type, value = nil
85+
86+
if needle.is_a? Array
87+
# Case 1: Filters with new format
88+
field, type, value = needle.first.values_at(*%w(field type value))
89+
else
90+
# Case 2: Filters with old format
91+
field, type, value = needle.values_at(*%w(field type value))
92+
end
93+
8594
value ||= ""
8695
case type.to_sym
8796
when :date

src/actors/FilterBarActor.js

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ export class FilterBarActor {
106106
loadSavedSearch(searchId) {
107107
this.disableAllFilters();
108108

109-
var savedSearch = this.filterBarStore.getSavedSearch(searchId);
110-
var filters = JSON.parse(savedSearch.configuration);
109+
const savedSearch = this.filterBarStore.getSavedSearch(searchId);
110+
const filters = this.parseSavedSearch(savedSearch);
111111

112112
if (this.verifySavedFilters(filters)) {
113113
this.filterBarStore.setActiveFilters(filters);
@@ -118,19 +118,26 @@ export class FilterBarActor {
118118
}
119119
}
120120

121-
verifySavedFilters(filters) {
122-
var filtersArr;
121+
parseSavedSearch(savedSearch) {
122+
const savedSearchFilters = JSON.parse(savedSearch.configuration)
123+
var filters = savedSearchFilters;
123124

124-
if (filters instanceof Array) {
125-
filtersArr = filters;
126-
} else {
127-
filtersArr = Object.keys(filters)
125+
if (!Array.isArray(savedSearchFilters)) {
126+
filters = Object.keys(savedSearchFilters)
128127
.map(function (name) {
129128
return { uid: name }
130129
});
131130
}
132131

133-
return new FilterVerificator(this.filterBarStore.getFilters(), filtersArr).verify();
132+
if (!Array.isArray(filters[0])) {
133+
filters = [filters]
134+
}
135+
136+
return filters;
137+
}
138+
139+
verifySavedFilters(parsedFilters) {
140+
return new FilterVerificator(this.filterBarStore.getFilters(), parsedFilters).verify();
134141
}
135142

136143
saveFilters(name) {

src/app.js

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,13 @@ function setupConfiguration(configuration) {
5050
if (url.query(true).q !== "") {
5151
const activeFilters = JSON.parse(url.query(true).q);
5252
configuration.filterBarConfiguration.activeFilters = [];
53-
for (var groupFilters of activeFilters) {
54-
const _groupFilters = []
55-
groupFilters.map(function(filter) {
56-
var configFilter = configuration.filterBarConfiguration.filters[filter.uid];
57-
58-
if (configFilter) {
59-
configFilter.filterUid = filter.uid;
60-
configFilter.uid = filter.uid;
61-
configFilter.value = filter.value;
62-
63-
if (filter.operator) {
64-
configFilter.operator = filter.operator;
65-
}
66-
}
67-
_groupFilters.push(configFilter);
68-
});
69-
configuration.filterBarConfiguration.activeFilters.push(_groupFilters);
53+
54+
if (Array.isArray(activeFilters[0])) {
55+
// Case 1: Filters with new format
56+
configuration.filterBarConfiguration.activeFilters = parseQueryVersion2(activeFilters, configuration);
57+
} else {
58+
// Case 2: Filters with old format
59+
configuration.filterBarConfiguration.activeFilters = parseQueryVersion1(activeFilters, configuration);
7060
}
7161
}
7262

@@ -81,6 +71,48 @@ function setupConfiguration(configuration) {
8171
return configuration;
8272
}
8373

74+
function parseQueryVersion1(activeFilters, configuration) {
75+
const _groupFilters = [];
76+
77+
for (const filter of activeFilters) {
78+
const configFilter = parseAndGetFilter(filter, configuration)
79+
_groupFilters.push(configFilter);
80+
}
81+
82+
return [_groupFilters];
83+
}
84+
85+
function parseQueryVersion2(activeFilters, configuration) {
86+
const results = [];
87+
88+
for (const groupFilters of activeFilters) {
89+
const _groupFilters = []
90+
groupFilters.map(function(filter) {
91+
const configFilter = parseAndGetFilter(filter, configuration)
92+
_groupFilters.push(configFilter);
93+
});
94+
results.push(_groupFilters);
95+
}
96+
97+
return results;
98+
}
99+
100+
function parseAndGetFilter(filter, configuration) {
101+
const configFilter = configuration.filterBarConfiguration.filters[filter.uid];
102+
103+
if (configFilter) {
104+
configFilter.filterUid = filter.uid;
105+
configFilter.uid = filter.uid;
106+
configFilter.value = filter.value;
107+
108+
if (filter.operator) {
109+
configFilter.operator = filter.operator;
110+
}
111+
}
112+
113+
return configFilter;
114+
}
115+
84116
document.addEventListener("DOMContentLoaded", function(){
85117
var configuration = {},
86118
filterableTableNode = document.getElementsByClassName("react-filterable-table")[0];

0 commit comments

Comments
 (0)