Skip to content

Commit 4987cb3

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

File tree

7 files changed

+283
-128
lines changed

7 files changed

+283
-128
lines changed

dist/react-filterbar.js

Lines changed: 95 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16940,7 +16940,9 @@ 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+
console.log("ID: ", searchId);
16944+
console.log("SAVED SEARCH: ", savedSearch);
16945+
var filters = this.parseSavedSearch(savedSearch);
1694416946

1694516947
if (this.verifySavedFilters(filters)) {
1694616948
this.filterBarStore.setActiveFilters(filters);
@@ -16951,21 +16953,30 @@ var FilterBarActor = /*#__PURE__*/function () {
1695116953
}
1695216954
}
1695316955
}, {
16954-
key: "verifySavedFilters",
16955-
value: function verifySavedFilters(filters) {
16956-
var filtersArr;
16957-
16958-
if (filters instanceof Array) {
16959-
filtersArr = filters;
16960-
} else {
16961-
filtersArr = Object.keys(filters).map(function (name) {
16956+
key: "parseSavedSearch",
16957+
value: function parseSavedSearch(savedSearch) {
16958+
var savedSearchFilters = JSON.parse(savedSearch.configuration);
16959+
console.log("JSON: ", savedSearchFilters);
16960+
var filters = savedSearchFilters;
16961+
16962+
if (!Array.isArray(savedSearchFilters)) {
16963+
filters = Object.keys(savedSearchFilters).map(function (name) {
1696216964
return {
1696316965
uid: name
1696416966
};
1696516967
});
1696616968
}
1696716969

16968-
return new _FilterVerificator.FilterVerificator(this.filterBarStore.getFilters(), filtersArr).verify();
16970+
if (!Array.isArray(filters[0])) {
16971+
filters = [filters];
16972+
}
16973+
16974+
return filters;
16975+
}
16976+
}, {
16977+
key: "verifySavedFilters",
16978+
value: function verifySavedFilters(parsedFilters) {
16979+
return new _FilterVerificator.FilterVerificator(this.filterBarStore.getFilters(), parsedFilters).verify();
1696916980
}
1697016981
}, {
1697116982
key: "saveFilters",
@@ -17138,40 +17149,12 @@ function setupConfiguration(configuration) {
1713817149
var activeFilters = JSON.parse(url.query(true).q);
1713917150
configuration.filterBarConfiguration.activeFilters = [];
1714017151

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();
17152+
if (Array.isArray(activeFilters[0])) {
17153+
// Case 1: Filters with new format
17154+
configuration.filterBarConfiguration.activeFilters = parseQueryVersion2(activeFilters, configuration);
17155+
} else {
17156+
// Case 2: Filters with old format
17157+
configuration.filterBarConfiguration.activeFilters = parseQueryVersion1(activeFilters, configuration);
1717517158
}
1717617159
}
1717717160

@@ -17187,6 +17170,74 @@ function setupConfiguration(configuration) {
1718717170
return configuration;
1718817171
}
1718917172

17173+
function parseQueryVersion1(activeFilters, configuration) {
17174+
var _groupFilters = [];
17175+
17176+
var _iterator = _createForOfIteratorHelper(activeFilters),
17177+
_step;
17178+
17179+
try {
17180+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
17181+
var filter = _step.value;
17182+
var configFilter = parseAndGetFilter(filter, configuration);
17183+
17184+
_groupFilters.push(configFilter);
17185+
}
17186+
} catch (err) {
17187+
_iterator.e(err);
17188+
} finally {
17189+
_iterator.f();
17190+
}
17191+
17192+
return [_groupFilters];
17193+
}
17194+
17195+
function parseQueryVersion2(activeFilters, configuration) {
17196+
var results = [];
17197+
17198+
var _iterator2 = _createForOfIteratorHelper(activeFilters),
17199+
_step2;
17200+
17201+
try {
17202+
var _loop = function _loop() {
17203+
var groupFilters = _step2.value;
17204+
var _groupFilters = [];
17205+
groupFilters.map(function (filter) {
17206+
var configFilter = parseAndGetFilter(filter, configuration);
17207+
17208+
_groupFilters.push(configFilter);
17209+
});
17210+
results.push(_groupFilters);
17211+
};
17212+
17213+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
17214+
_loop();
17215+
}
17216+
} catch (err) {
17217+
_iterator2.e(err);
17218+
} finally {
17219+
_iterator2.f();
17220+
}
17221+
17222+
return results;
17223+
}
17224+
17225+
function parseAndGetFilter(filter, configuration) {
17226+
var configFilter = configuration.filterBarConfiguration.filters[filter.uid];
17227+
17228+
if (configFilter) {
17229+
configFilter.filterUid = filter.uid;
17230+
configFilter.uid = filter.uid;
17231+
configFilter.value = filter.value;
17232+
17233+
if (filter.operator) {
17234+
configFilter.operator = filter.operator;
17235+
}
17236+
}
17237+
17238+
return configFilter;
17239+
}
17240+
1719017241
document.addEventListener("DOMContentLoaded", function () {
1719117242
var configuration = {},
1719217243
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: 96 additions & 45 deletions
Large diffs are not rendered by default.

example/saved_search.yml

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
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"}]'
6+
Old Fromat 2: '[{"uid":"author_multi_test","type":"multi_select","field":"author","value":["Author
7+
10"]},{"uid":"author_multi_test","type":"multi_select","field":"author","value":["Author
8+
20"]},{"uid":"author_multi_test","type":"multi_select","field":"author","value":["Author
9+
30"]},{"uid":"author_multi_test","type":"multi_select","field":"author","value":["Author
10+
40"]}]'

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: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,10 @@ 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+
console.log("ID: ", searchId);
111+
console.log("SAVED SEARCH: ", savedSearch);
112+
const filters = this.parseSavedSearch(savedSearch);
111113

112114
if (this.verifySavedFilters(filters)) {
113115
this.filterBarStore.setActiveFilters(filters);
@@ -118,19 +120,27 @@ export class FilterBarActor {
118120
}
119121
}
120122

121-
verifySavedFilters(filters) {
122-
var filtersArr;
123+
parseSavedSearch(savedSearch) {
124+
const savedSearchFilters = JSON.parse(savedSearch.configuration)
125+
console.log("JSON: ", savedSearchFilters);
126+
var filters = savedSearchFilters;
123127

124-
if (filters instanceof Array) {
125-
filtersArr = filters;
126-
} else {
127-
filtersArr = Object.keys(filters)
128+
if (!Array.isArray(savedSearchFilters)) {
129+
filters = Object.keys(savedSearchFilters)
128130
.map(function (name) {
129131
return { uid: name }
130132
});
131133
}
132134

133-
return new FilterVerificator(this.filterBarStore.getFilters(), filtersArr).verify();
135+
if (!Array.isArray(filters[0])) {
136+
filters = [filters]
137+
}
138+
139+
return filters;
140+
}
141+
142+
verifySavedFilters(parsedFilters) {
143+
return new FilterVerificator(this.filterBarStore.getFilters(), parsedFilters).verify();
134144
}
135145

136146
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)