78 lines
1.7 KiB
JavaScript
Raw Normal View History

2019-08-13 16:41:15 +02:00
import { isEmpty, toString } from 'lodash';
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('_');
2019-08-13 16:41:15 +02:00
let filter = `_${split[split.length - 1]}`;
if (
![
'_ne',
'_lt',
'_lte',
'_gt',
'_gte',
'_contains',
'_containss',
'_in',
'_nin',
].includes(filter)
) {
filter = '=';
}
const toSlice = filter === '=' ? split.length : split.length - 1;
2019-07-10 11:12:30 +02:00
acc.push({
2019-08-13 16:41:15 +02:00
name: split
.slice(0, toSlice)
.join('_')
.replace('?', ''),
2019-07-10 11:12:30 +02:00
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-08-13 16:41:15 +02:00
.filter(key => !isEmpty(toString(filters[key])))
2019-07-10 11:12:30 +02:00
.map(key => {
2019-07-10 12:20:25 +02:00
let ret = `${key}=${filters[key]}`;
2019-07-10 11:12:30 +02:00
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('&');
2019-07-10 12:20:25 +02:00
ret = formattedFilters;
2019-07-10 11:12:30 +02:00
}
2019-07-10 12:20:25 +02:00
return ret;
2019-07-10 11:12:30 +02:00
})
2019-07-09 18:11:09 +02:00
.join('&');
};
export { generateFiltersFromSearch, generateSearchFromFilters };