mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-13 17:38:59 +08:00
fix(FE): escape regular expression to filter dashboards with special characters (#1279)
* fix(FE): escape reg exp to filter dashboards * test(FE): add type and use uuid v4
This commit is contained in:
parent
84b876170d
commit
d21ab7b82d
@ -0,0 +1,58 @@
|
|||||||
|
import { Dashboard } from 'types/api/dashboard/getAll';
|
||||||
|
import { v4 as uuid } from 'uuid';
|
||||||
|
|
||||||
|
import { TOperator } from '../types';
|
||||||
|
import { executeSearchQueries } from '../utils';
|
||||||
|
|
||||||
|
describe('executeSearchQueries', () => {
|
||||||
|
const firstDashboard: Dashboard = {
|
||||||
|
id: 11111,
|
||||||
|
uuid: uuid(),
|
||||||
|
created_at: '',
|
||||||
|
updated_at: '',
|
||||||
|
data: {
|
||||||
|
title: 'first dashboard',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const secondDashboard: Dashboard = {
|
||||||
|
id: 22222,
|
||||||
|
uuid: uuid(),
|
||||||
|
created_at: '',
|
||||||
|
updated_at: '',
|
||||||
|
data: {
|
||||||
|
title: 'second dashboard',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const thirdDashboard: Dashboard = {
|
||||||
|
id: 333333,
|
||||||
|
uuid: uuid(),
|
||||||
|
created_at: '',
|
||||||
|
updated_at: '',
|
||||||
|
data: {
|
||||||
|
title: 'third dashboard (with special characters +?\\)',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
const dashboards = [firstDashboard, secondDashboard, thirdDashboard];
|
||||||
|
|
||||||
|
it('should filter dashboards based on title', () => {
|
||||||
|
const query = {
|
||||||
|
category: 'title',
|
||||||
|
id: 'someid',
|
||||||
|
operator: '=' as TOperator,
|
||||||
|
value: 'first dashboard',
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(executeSearchQueries([query], dashboards)).toEqual([firstDashboard]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should filter dashboards with special characters', () => {
|
||||||
|
const query = {
|
||||||
|
category: 'title',
|
||||||
|
id: 'someid',
|
||||||
|
operator: '=' as TOperator,
|
||||||
|
value: 'third dashboard (with special characters +?\\)',
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(executeSearchQueries([query], dashboards)).toEqual([thirdDashboard]);
|
||||||
|
});
|
||||||
|
});
|
@ -42,6 +42,8 @@ export const executeSearchQueries = (
|
|||||||
if (!searchData.length || !queries.length) {
|
if (!searchData.length || !queries.length) {
|
||||||
return searchData;
|
return searchData;
|
||||||
}
|
}
|
||||||
|
const escapeRegExp = (regExp: string): string =>
|
||||||
|
regExp.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||||
|
|
||||||
queries.forEach((query: IQueryStructure) => {
|
queries.forEach((query: IQueryStructure) => {
|
||||||
const { operator } = query;
|
const { operator } = query;
|
||||||
@ -61,7 +63,7 @@ export const executeSearchQueries = (
|
|||||||
for (const searchSpaceItem of searchSpace) {
|
for (const searchSpaceItem of searchSpace) {
|
||||||
if (searchSpaceItem)
|
if (searchSpaceItem)
|
||||||
for (const queryValue of value) {
|
for (const queryValue of value) {
|
||||||
if (searchSpaceItem.match(queryValue)) {
|
if (searchSpaceItem.match(escapeRegExp(queryValue))) {
|
||||||
return resolveOperator(true, operator);
|
return resolveOperator(true, operator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user