fix: log details action not it (#3350)

* fix: log details action not it

* fix: getting keys when query param redirect

* fix: getting operator

* fix: data type for not existing autocomplete value

---------

Co-authored-by: Palash Gupta <palashgdev@gmail.com>
This commit is contained in:
Yevhen Shevchenko 2023-08-16 16:52:30 +03:00 committed by GitHub
parent 8ef4c0bcdd
commit 9a6fcb6b1d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 65 additions and 45 deletions

View File

@ -1,20 +1,20 @@
import { OPERATORS, QueryBuilderKeys } from 'constants/queryBuilder'; import { getAggregateKeys } from 'api/queryBuilder/getAttributeKeys';
import { QueryBuilderKeys } from 'constants/queryBuilder';
import ROUTES from 'constants/routes'; import ROUTES from 'constants/routes';
import { getOperatorValue } from 'container/QueryBuilder/filters/QueryBuilderSearch/utils';
import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder'; import { useQueryBuilder } from 'hooks/queryBuilder/useQueryBuilder';
import { useNotifications } from 'hooks/useNotifications';
import { getGeneratedFilterQueryString } from 'lib/getGeneratedFilterQueryString'; import { getGeneratedFilterQueryString } from 'lib/getGeneratedFilterQueryString';
import { chooseAutocompleteFromCustomValue } from 'lib/newQueryBuilder/chooseAutocompleteFromCustomValue'; import { chooseAutocompleteFromCustomValue } from 'lib/newQueryBuilder/chooseAutocompleteFromCustomValue';
import { useCallback, useMemo, useState } from 'react'; import { useCallback, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
import { useQueryClient } from 'react-query'; import { useQueryClient } from 'react-query';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import { useHistory, useLocation } from 'react-router-dom'; import { useHistory, useLocation } from 'react-router-dom';
import { AppState } from 'store/reducers'; import { AppState } from 'store/reducers';
import { SET_DETAILED_LOG_DATA } from 'types/actions/logs'; import { SET_DETAILED_LOG_DATA } from 'types/actions/logs';
import { SuccessResponse } from 'types/api';
import { ILog } from 'types/api/logs/log'; import { ILog } from 'types/api/logs/log';
import { import { BaseAutocompleteData } from 'types/api/queryBuilder/queryAutocompleteResponse';
BaseAutocompleteData,
IQueryAutocompleteResponse,
} from 'types/api/queryBuilder/queryAutocompleteResponse';
import { Query } from 'types/api/queryBuilder/queryBuilderData'; import { Query } from 'types/api/queryBuilder/queryBuilderData';
import { ILogsReducer } from 'types/reducer/logs'; import { ILogsReducer } from 'types/reducer/logs';
import { v4 as uuid } from 'uuid'; import { v4 as uuid } from 'uuid';
@ -31,6 +31,9 @@ export const useActiveLog = (): UseActiveLog => {
const { pathname } = useLocation(); const { pathname } = useLocation();
const history = useHistory(); const history = useHistory();
const { currentQuery, redirectWithQueryBuilderData } = useQueryBuilder(); const { currentQuery, redirectWithQueryBuilderData } = useQueryBuilder();
const { notifications } = useNotifications();
const { t } = useTranslation('common');
const isLogsPage = useMemo(() => pathname === ROUTES.LOGS, [pathname]); const isLogsPage = useMemo(() => pathname === ROUTES.LOGS, [pathname]);
@ -60,48 +63,64 @@ export const useActiveLog = (): UseActiveLog => {
const onClearActiveLog = useCallback((): void => setActiveLog(null), []); const onClearActiveLog = useCallback((): void => setActiveLog(null), []);
const onAddToQueryExplorer = useCallback( const onAddToQueryExplorer = useCallback(
(fieldKey: string, fieldValue: string, operator: string): void => { async (
const keysAutocomplete: BaseAutocompleteData[] = fieldKey: string,
queryClient.getQueryData<SuccessResponse<IQueryAutocompleteResponse>>( fieldValue: string,
[QueryBuilderKeys.GET_AGGREGATE_KEYS], operator: string,
{ exact: false }, ): Promise<void> => {
)?.payload.attributeKeys || []; try {
const keysAutocompleteResponse = await queryClient.fetchQuery(
[QueryBuilderKeys.GET_AGGREGATE_KEYS, fieldKey],
async () =>
getAggregateKeys({
searchText: fieldKey,
aggregateOperator: currentQuery.builder.queryData[0].aggregateOperator,
dataSource: currentQuery.builder.queryData[0].dataSource,
aggregateAttribute:
currentQuery.builder.queryData[0].aggregateAttribute.key,
}),
);
const existAutocompleteKey = chooseAutocompleteFromCustomValue( const keysAutocomplete: BaseAutocompleteData[] =
keysAutocomplete, keysAutocompleteResponse.payload?.attributeKeys || [];
fieldKey,
);
const currentOperator = const existAutocompleteKey = chooseAutocompleteFromCustomValue(
Object.keys(OPERATORS).find((op) => op === operator) || ''; keysAutocomplete,
fieldKey,
);
const nextQuery: Query = { const currentOperator = getOperatorValue(operator);
...currentQuery,
builder: {
...currentQuery.builder,
queryData: currentQuery.builder.queryData.map((item) => ({
...item,
filters: {
...item.filters,
items: [
...item.filters.items.filter(
(item) => item.key?.id !== existAutocompleteKey.id,
),
{
id: uuid(),
key: existAutocompleteKey,
op: currentOperator,
value: fieldValue,
},
],
},
})),
},
};
redirectWithQueryBuilderData(nextQuery); const nextQuery: Query = {
...currentQuery,
builder: {
...currentQuery.builder,
queryData: currentQuery.builder.queryData.map((item) => ({
...item,
filters: {
...item.filters,
items: [
...item.filters.items.filter(
(item) => item.key?.id !== existAutocompleteKey.id,
),
{
id: uuid(),
key: existAutocompleteKey,
op: currentOperator,
value: fieldValue,
},
],
},
})),
},
};
redirectWithQueryBuilderData(nextQuery);
} catch {
notifications.error({ message: t('something_went_wrong') });
}
}, },
[currentQuery, queryClient, redirectWithQueryBuilderData], [currentQuery, notifications, queryClient, redirectWithQueryBuilderData, t],
); );
const onAddToQueryLogs = useCallback( const onAddToQueryLogs = useCallback(

View File

@ -9,8 +9,9 @@ export const chooseAutocompleteFromCustomValue = (
(sourceAutoComplete) => value === sourceAutoComplete.key, (sourceAutoComplete) => value === sourceAutoComplete.key,
); );
if (!firstBaseAutoCompleteValue) if (!firstBaseAutoCompleteValue) {
return { ...initialAutocompleteData, key: value }; return { ...initialAutocompleteData, key: value, dataType: 'string' };
}
return firstBaseAutoCompleteValue; return firstBaseAutoCompleteValue;
}; };