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 };
|