mirror of
https://github.com/strapi/strapi.git
synced 2025-09-26 17:00:55 +00:00
Fix count endpoint with filters
Signed-off-by: soupette <cyril.lpz@gmail.com>
This commit is contained in:
parent
a940bbc8c0
commit
bdbec4e3f0
@ -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;
|
||||||
|
@ -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',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -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];
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user