Skip to content

Commit

Permalink
[NEP-12629] Fix default filters URLs with old format for SavedSearches.
Browse files Browse the repository at this point in the history
  • Loading branch information
Sergei Aksiutin committed Mar 1, 2022
1 parent 828327a commit d194b8c
Show file tree
Hide file tree
Showing 5 changed files with 220 additions and 93 deletions.
108 changes: 74 additions & 34 deletions dist/react-filterbar.js
Original file line number Diff line number Diff line change
Expand Up @@ -17138,40 +17138,12 @@ function setupConfiguration(configuration) {
var activeFilters = JSON.parse(url.query(true).q);
configuration.filterBarConfiguration.activeFilters = [];

var _iterator = _createForOfIteratorHelper(activeFilters),
_step;

try {
var _loop = function _loop() {
groupFilters = _step.value;
var _groupFilters = [];
groupFilters.map(function (filter) {
var configFilter = configuration.filterBarConfiguration.filters[filter.uid];

if (configFilter) {
configFilter.filterUid = filter.uid;
configFilter.uid = filter.uid;
configFilter.value = filter.value;

if (filter.operator) {
configFilter.operator = filter.operator;
}
}

_groupFilters.push(configFilter);
});
configuration.filterBarConfiguration.activeFilters.push(_groupFilters);
};

for (_iterator.s(); !(_step = _iterator.n()).done;) {
var groupFilters;

_loop();
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
if (Array.isArray(activeFilters[0])) {
// Case 1: Filters with new format
configuration.filterBarConfiguration.activeFilters = parseQueryVersion2(activeFilters, configuration);
} else {
// Case 2: Filters with old format
configuration.filterBarConfiguration.activeFilters = parseQueryVersion1(activeFilters, configuration);
}
}

Expand All @@ -17187,6 +17159,74 @@ function setupConfiguration(configuration) {
return configuration;
}

function parseQueryVersion1(activeFilters, configuration) {
var _groupFilters = [];

var _iterator = _createForOfIteratorHelper(activeFilters),
_step;

try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
var filter = _step.value;
var configFilter = parseAndGetFilter(filter, configuration);

_groupFilters.push(configFilter);
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}

return [_groupFilters];
}

function parseQueryVersion2(activeFilters, configuration) {
var results = [];

var _iterator2 = _createForOfIteratorHelper(activeFilters),
_step2;

try {
var _loop = function _loop() {
var groupFilters = _step2.value;
var _groupFilters = [];
groupFilters.map(function (filter) {
var configFilter = parseAndGetFilter(filter, configuration);

_groupFilters.push(configFilter);
});
results.push(_groupFilters);
};

for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
_loop();
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}

return results;
}

function parseAndGetFilter(filter, configuration) {
var configFilter = configuration.filterBarConfiguration.filters[filter.uid];

if (configFilter) {
configFilter.filterUid = filter.uid;
configFilter.uid = filter.uid;
configFilter.value = filter.value;

if (filter.operator) {
configFilter.operator = filter.operator;
}
}

return configFilter;
}

document.addEventListener("DOMContentLoaded", function () {
var configuration = {},
filterableTableNode = document.getElementsByClassName("react-filterable-table")[0];
Expand Down
12 changes: 6 additions & 6 deletions dist/react-filterbar.min.js

Large diffs are not rendered by default.

116 changes: 81 additions & 35 deletions example/public/js/react-filterbar.js

Large diffs are not rendered by default.

11 changes: 10 additions & 1 deletion example/server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,16 @@ def loop_over_queries(queries, haystack)
end

def search(needle, haystack)
field, type, value = needle.first.values_at(*%w(field type value))
field, type, value = nil

if needle.is_a? Array
# Case 1: Filters with new format
field, type, value = needle.first.values_at(*%w(field type value))
else
# Case 2: Filters with old format
field, type, value = needle.values_at(*%w(field type value))
end

value ||= ""
case type.to_sym
when :date
Expand Down
66 changes: 49 additions & 17 deletions src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,23 +50,13 @@ function setupConfiguration(configuration) {
if (url.query(true).q !== "") {
const activeFilters = JSON.parse(url.query(true).q);
configuration.filterBarConfiguration.activeFilters = [];
for (var groupFilters of activeFilters) {
const _groupFilters = []
groupFilters.map(function(filter) {
var configFilter = configuration.filterBarConfiguration.filters[filter.uid];

if (configFilter) {
configFilter.filterUid = filter.uid;
configFilter.uid = filter.uid;
configFilter.value = filter.value;

if (filter.operator) {
configFilter.operator = filter.operator;
}
}
_groupFilters.push(configFilter);
});
configuration.filterBarConfiguration.activeFilters.push(_groupFilters);

if (Array.isArray(activeFilters[0])) {
// Case 1: Filters with new format
configuration.filterBarConfiguration.activeFilters = parseQueryVersion2(activeFilters, configuration);
} else {
// Case 2: Filters with old format
configuration.filterBarConfiguration.activeFilters = parseQueryVersion1(activeFilters, configuration);
}
}

Expand All @@ -81,6 +71,48 @@ function setupConfiguration(configuration) {
return configuration;
}

function parseQueryVersion1(activeFilters, configuration) {
const _groupFilters = [];

for (const filter of activeFilters) {
const configFilter = parseAndGetFilter(filter, configuration)
_groupFilters.push(configFilter);
}

return [_groupFilters];
}

function parseQueryVersion2(activeFilters, configuration) {
const results = [];

for (const groupFilters of activeFilters) {
const _groupFilters = []
groupFilters.map(function(filter) {
const configFilter = parseAndGetFilter(filter, configuration)
_groupFilters.push(configFilter);
});
results.push(_groupFilters);
}

return results;
}

function parseAndGetFilter(filter, configuration) {
const configFilter = configuration.filterBarConfiguration.filters[filter.uid];

if (configFilter) {
configFilter.filterUid = filter.uid;
configFilter.uid = filter.uid;
configFilter.value = filter.value;

if (filter.operator) {
configFilter.operator = filter.operator;
}
}

return configFilter;
}

document.addEventListener("DOMContentLoaded", function(){
var configuration = {},
filterableTableNode = document.getElementsByClassName("react-filterable-table")[0];
Expand Down

0 comments on commit d194b8c

Please sign in to comment.