Fix count endpoint with filters

Signed-off-by: soupette <cyril.lpz@gmail.com>
This commit is contained in:
soupette 2020-04-06 14:22:50 +02:00
parent a940bbc8c0
commit bdbec4e3f0
5 changed files with 32 additions and 9 deletions

View File

@ -1,16 +1,15 @@
import { isEmpty, toString } from 'lodash'; import { isEmpty, toString } from 'lodash';
const generateSearchFromFilters = filters => { const generateSearchFromFilters = (filters, paramsToFilter = []) => {
return Object.keys(filters) return Object.keys(filters)
.filter(key => !isEmpty(toString(filters[key]))) .filter(key => !paramsToFilter.includes(key) && !isEmpty(toString(filters[key])))
.map(key => { .map(key => {
let ret = `${key}=${filters[key]}`; let ret = `${key}=${filters[key]}`;
if (key === 'filters') { if (key === 'filters') {
const formattedFilters = filters[key] const formattedFilters = filters[key]
.reduce((acc, curr) => { .reduce((acc, curr) => {
const key = const key = curr.filter === '=' ? curr.name : `${curr.name}${curr.filter}`;
curr.filter === '=' ? curr.name : `${curr.name}${curr.filter}`;
acc.push(`${key}=${curr.value}`); acc.push(`${key}=${curr.value}`);
return acc; return acc;

View File

@ -123,10 +123,11 @@ const HomePage = () => {
}; };
const fetchDataCount = async () => { const fetchDataCount = async () => {
const params = generateStringFromParams(query, ['_limit', '_sort', '_start']);
const requestURL = getRequestUrl('files/count'); const requestURL = getRequestUrl('files/count');
try { try {
const { count } = await request(requestURL, { const { count } = await request(`${requestURL}?${params}`, {
method: 'GET', method: 'GET',
}); });

View File

@ -1,12 +1,14 @@
import { isEmpty, toString } from 'lodash'; import { isEmpty, toString } from 'lodash';
import generateParamsFromQuery from './generateParamsFromQuery'; import generateParamsFromQuery from './generateParamsFromQuery';
const generateStringFromParams = query => { const generateStringFromParams = (query, paramsToFilter = []) => {
let paramsString = ''; let paramsString = '';
const paramsObject = generateParamsFromQuery(query); const paramsObject = generateParamsFromQuery(query);
Object.keys(paramsObject) Object.keys(paramsObject)
.filter(key => !isEmpty(toString(paramsObject[key]))) .filter(key => {
return !paramsToFilter.includes(key) && !isEmpty(toString(paramsObject[key]));
})
.forEach(key => { .forEach(key => {
const value = paramsObject[key]; const value = paramsObject[key];

View File

@ -41,5 +41,25 @@ describe('MEDIA LIBRARY | containers | HomePage | utils', () => {
expect(generateStringFromParams(query)).toEqual(expected); expect(generateStringFromParams(query)).toEqual(expected);
}); });
}); });
describe('it should filter the defined params', () => {
it('should return _ncontains instead of _contains', () => {
const search = '?mime_ncontains=file&test=true';
const query = new URLSearchParams(search);
const expected = '_limit=10&_start=0&mime_contains=image&mime_contains=video&test=true';
expect(generateStringFromParams(query, [])).toEqual(expected);
});
it('should not return the _limit param', () => {
const search = '?mime_ncontains=file';
const query = new URLSearchParams(search);
const expected = '_start=0&mime_contains=image&mime_contains=video';
expect(generateStringFromParams(query, ['_limit'])).toEqual(expected);
});
});
}); });
}); });

View File

@ -293,9 +293,11 @@ const InputModalStepperProvider = ({
const fetchMediaLibFilesCount = async () => { const fetchMediaLibFilesCount = async () => {
const requestURL = getRequestUrl('files/count'); const requestURL = getRequestUrl('files/count');
const compactedParams = compactParams(params);
const paramsToSend = generateSearchFromFilters(compactedParams, ['_limit', '_sort', '_start']);
try { try {
return await request(`${requestURL}`, { return await request(`${requestURL}?${paramsToSend}`, {
method: 'GET', method: 'GET',
}); });
} catch (err) { } catch (err) {
@ -317,7 +319,6 @@ const InputModalStepperProvider = ({
const fetchMediaLibFiles = async () => { const fetchMediaLibFiles = async () => {
const requestURL = getRequestUrl('files'); const requestURL = getRequestUrl('files');
const compactedParams = compactParams(params); const compactedParams = compactParams(params);
const paramsToSend = generateSearchFromFilters(compactedParams); const paramsToSend = generateSearchFromFilters(compactedParams);