56 lines
1.3 KiB
JavaScript
Raw Normal View History

2019-07-09 18:11:09 +02:00
/**
* Generate filters object from string
* @param {String} search
* @return {Object}
*/
const generateFiltersFromSearch = search => {
return search
.split('&')
.filter(
x =>
!x.includes('_limit') &&
!x.includes('_page') &&
!x.includes('_sort') &&
!x.includes('source') &&
!x.includes('_q=')
)
2019-07-10 11:12:30 +02:00
.reduce((acc, curr) => {
const [name, value] = curr.split('=');
const split = name.split('_');
const filter = split.length > 1 ? `_${split[1]}` : '=';
acc.push({
name: split[0].replace('?', ''),
filter,
value: decodeURIComponent(value),
});
2019-07-09 18:11:09 +02:00
return acc;
2019-07-10 11:12:30 +02:00
}, []);
2019-07-09 18:11:09 +02:00
};
const generateSearchFromFilters = filters => {
return Object.keys(filters)
2019-07-10 08:43:40 +02:00
.filter(key => filters[key] !== '')
2019-07-10 11:12:30 +02:00
.map(key => {
if (key === 'filters') {
const formattedFilters = filters[key]
.reduce((acc, curr) => {
const key =
curr.filter === '=' ? curr.name : `${curr.name}${curr.filter}`;
acc.push(`${key}=${curr.value}`);
return acc;
}, [])
.join('&');
return formattedFilters;
}
return `${key}=${filters[key]}`;
})
2019-07-09 18:11:09 +02:00
.join('&');
};
export { generateFiltersFromSearch, generateSearchFromFilters };