feat: search filter is added in the trace filter

This commit is contained in:
Palash 2022-06-23 01:04:38 +05:30
parent 7b315c6766
commit 224ec8d0d9
4 changed files with 79 additions and 4 deletions

View File

@ -1,12 +1,19 @@
import React from 'react'; import { Button, Input } from 'antd';
import { useSelector } from 'react-redux'; import React, { useState } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { Dispatch } from 'redux';
import { AppState } from 'store/reducers'; import { AppState } from 'store/reducers';
import { INITIAL_FILTER_VALUE } from 'store/reducers/trace';
import AppActions from 'types/actions';
import { UPDATE_SPAN_UPDATE_FILTER_DISPLAY_VALUE } from 'types/actions/trace';
import { TraceFilterEnum, TraceReducer } from 'types/reducer/trace'; import { TraceFilterEnum, TraceReducer } from 'types/reducer/trace';
import CheckBoxComponent from '../Common/Checkbox'; import CheckBoxComponent from '../Common/Checkbox';
const { Search } = Input;
function CommonCheckBox(props: CommonCheckBoxProps): JSX.Element { function CommonCheckBox(props: CommonCheckBoxProps): JSX.Element {
const { filter } = useSelector<AppState, TraceReducer>( const { filter, filterDisplayValue } = useSelector<AppState, TraceReducer>(
(state) => state.traces, (state) => state.traces,
); );
@ -15,9 +22,34 @@ function CommonCheckBox(props: CommonCheckBoxProps): JSX.Element {
const status = filter.get(name) || {}; const status = filter.get(name) || {};
const statusObj = Object.keys(status); const statusObj = Object.keys(status);
const numberOfFilters = filterDisplayValue.get(name) || 0;
const dispatch = useDispatch<Dispatch<AppActions>>();
const [searchFilter, setSearchFilter] = useState<string>('');
const onClickMoreHandler = (): void => {
const newFilterDisplayValue = new Map(filterDisplayValue);
const preValue =
(newFilterDisplayValue.get(name) || 0) + INITIAL_FILTER_VALUE;
newFilterDisplayValue.set(name, preValue);
dispatch({
type: UPDATE_SPAN_UPDATE_FILTER_DISPLAY_VALUE,
payload: newFilterDisplayValue,
});
};
return ( return (
<> <>
<Search
value={searchFilter}
onChange={(e): void => setSearchFilter(e.target.value)}
style={{
padding: '0 3%',
}}
placeholder="Filter Values"
/>
{statusObj {statusObj
.sort((a, b) => { .sort((a, b) => {
const countA = +status[a]; const countA = +status[a];
@ -28,6 +60,13 @@ function CommonCheckBox(props: CommonCheckBoxProps): JSX.Element {
} }
return countA - countB; return countA - countB;
}) })
.filter((_, index) => index < numberOfFilters)
.filter((filter) => {
if (searchFilter.length === 0) {
return true;
}
return filter.includes(searchFilter);
})
.map((e) => ( .map((e) => (
<CheckBoxComponent <CheckBoxComponent
key={e} key={e}
@ -38,6 +77,12 @@ function CommonCheckBox(props: CommonCheckBoxProps): JSX.Element {
}} }}
/> />
))} ))}
{numberOfFilters && statusObj.length > numberOfFilters && (
<Button onClick={onClickMoreHandler} type="link">
More
</Button>
)}
</> </>
); );
} }

View File

@ -11,6 +11,7 @@ import {
UPDATE_SELECTED_TAGS, UPDATE_SELECTED_TAGS,
UPDATE_SPAN_ORDER, UPDATE_SPAN_ORDER,
UPDATE_SPAN_ORDER_PARAMS, UPDATE_SPAN_ORDER_PARAMS,
UPDATE_SPAN_UPDATE_FILTER_DISPLAY_VALUE,
UPDATE_SPANS_AGGREGATE, UPDATE_SPANS_AGGREGATE,
UPDATE_SPANS_AGGREGATE_PAGE_NUMBER, UPDATE_SPANS_AGGREGATE_PAGE_NUMBER,
UPDATE_SPANS_AGGREGATE_PAGE_SIZE, UPDATE_SPANS_AGGREGATE_PAGE_SIZE,
@ -23,6 +24,8 @@ import {
} from 'types/actions/trace'; } from 'types/actions/trace';
import { TraceFilterEnum, TraceReducer } from 'types/reducer/trace'; import { TraceFilterEnum, TraceReducer } from 'types/reducer/trace';
export const INITIAL_FILTER_VALUE = 4;
const initialValue: TraceReducer = { const initialValue: TraceReducer = {
filter: new Map(), filter: new Map(),
filterToFetchData: ['duration', 'status', 'serviceName'], filterToFetchData: ['duration', 'status', 'serviceName'],
@ -53,6 +56,17 @@ const initialValue: TraceReducer = {
loading: true, loading: true,
payload: { items: {} }, payload: { items: {} },
}, },
filterDisplayValue: new Map<TraceFilterEnum, number>([
['component', INITIAL_FILTER_VALUE],
['duration', INITIAL_FILTER_VALUE],
['httpCode', INITIAL_FILTER_VALUE],
['httpHost', INITIAL_FILTER_VALUE],
['httpMethod', INITIAL_FILTER_VALUE],
['httpUrl', INITIAL_FILTER_VALUE],
['operation', INITIAL_FILTER_VALUE],
['serviceName', INITIAL_FILTER_VALUE],
['status', INITIAL_FILTER_VALUE],
]),
}; };
const traceReducer = ( const traceReducer = (
@ -251,6 +265,13 @@ const traceReducer = (
}; };
} }
case UPDATE_SPAN_UPDATE_FILTER_DISPLAY_VALUE: {
return {
...state,
filterDisplayValue: action.payload,
};
}
default: default:
return state; return state;
} }

View File

@ -31,6 +31,8 @@ export const UPDATE_SPANS_AGGREGATE_PAGE_NUMBER =
export const UPDATE_SPANS_AGGREGATE_PAGE_SIZE = export const UPDATE_SPANS_AGGREGATE_PAGE_SIZE =
'UPDATE_SPANS_AGGREGATE_PAGE_SIZE'; 'UPDATE_SPANS_AGGREGATE_PAGE_SIZE';
export const UPDATE_SPAN_ORDER_PARAMS = 'UPDATE_SPAN_ORDER_PARAMS'; export const UPDATE_SPAN_ORDER_PARAMS = 'UPDATE_SPAN_ORDER_PARAMS';
export const UPDATE_SPAN_UPDATE_FILTER_DISPLAY_VALUE =
'UPDATE_SPAN_UPDATE_FILTER_DISPLAY_VALUE';
export interface UpdateFilter { export interface UpdateFilter {
type: typeof UPDATE_TRACE_FILTER; type: typeof UPDATE_TRACE_FILTER;
@ -187,6 +189,11 @@ export interface UpdateSpanParams {
}; };
} }
export interface UpdateTraceFilterDisplayValue {
type: typeof UPDATE_SPAN_UPDATE_FILTER_DISPLAY_VALUE;
payload: TraceReducer['filterDisplayValue'];
}
export type TraceActions = export type TraceActions =
| UpdateFilter | UpdateFilter
| GetTraceFilter | GetTraceFilter
@ -208,4 +215,5 @@ export type TraceActions =
| UpdateSpanOrder | UpdateSpanOrder
| UpdateSpansAggregatePageNumber | UpdateSpansAggregatePageNumber
| UpdateSpanSize | UpdateSpanSize
| UpdateSpanParams; | UpdateSpanParams
| UpdateTraceFilterDisplayValue;

View File

@ -32,6 +32,7 @@ export interface TraceReducer {
payload: PayloadProps; payload: PayloadProps;
}; };
yAxisUnit: string | undefined; yAxisUnit: string | undefined;
filterDisplayValue: Map<TraceFilterEnum, number>;
} }
interface SpansAggregateData { interface SpansAggregateData {