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