diff --git a/frontend/src/components/Logs/AddToQueryHOC.tsx b/frontend/src/components/Logs/AddToQueryHOC.tsx index ea517fa003..d8aee19708 100644 --- a/frontend/src/components/Logs/AddToQueryHOC.tsx +++ b/frontend/src/components/Logs/AddToQueryHOC.tsx @@ -2,7 +2,9 @@ import { Button, Popover } from 'antd'; import { generateFilterQuery } from 'lib/logs/generateFilterQuery'; import React, { memo, useCallback, useMemo } from 'react'; import { useDispatch, useSelector } from 'react-redux'; +import { Dispatch } from 'redux'; import { AppState } from 'store/reducers'; +import AppActions from 'types/actions'; import { SET_SEARCH_QUERY_STRING } from 'types/actions/logs'; import { ILogsReducer } from 'types/reducer/logs'; @@ -14,7 +16,7 @@ function AddToQueryHOC({ const { searchFilter: { queryString }, } = useSelector((store) => store.logs); - const dispatch = useDispatch(); + const dispatch = useDispatch>(); const generatedQuery = useMemo( () => generateFilterQuery({ fieldKey, fieldValue, type: 'IN' }), @@ -31,7 +33,9 @@ function AddToQueryHOC({ } dispatch({ type: SET_SEARCH_QUERY_STRING, - payload: updatedQueryString, + payload: { + searchQueryString: updatedQueryString, + }, }); }, [dispatch, generatedQuery, queryString]); diff --git a/frontend/src/components/Logs/LogItem/index.tsx b/frontend/src/components/Logs/LogItem/index.tsx index aa24cd7414..b21b50b43c 100644 --- a/frontend/src/components/Logs/LogItem/index.tsx +++ b/frontend/src/components/Logs/LogItem/index.tsx @@ -101,15 +101,9 @@ function LogItem({ logData }: LogItemProps): JSX.Element { {'{'} <> - + {flattenLogData.stream && ( - + )} ((state) => state.logs); + const globalTime = useSelector( + (state) => state.globalTime, + ); const dispatch = useDispatch(); const handleLogLinesPerPageChange = (e: number): void => { dispatch({ type: SET_LOG_LINES_PER_PAGE, - payload: e, + payload: { + logLinesPerPage: e, + }, }); }; const handleGoToLatest = (): void => { + const { maxTime, minTime } = getMinMax( + globalTime.selectedTime, + globalTime.minTime, + globalTime.maxTime, + ); + dispatch({ type: RESET_ID_START_AND_END, + payload: getGlobalTime(globalTime.selectedTime, { + maxTime, + minTime, + }), }); }; diff --git a/frontend/src/container/LogDetailedView/ActionItem.tsx b/frontend/src/container/LogDetailedView/ActionItem.tsx index e4faa8e8b5..10a7419bff 100644 --- a/frontend/src/container/LogDetailedView/ActionItem.tsx +++ b/frontend/src/container/LogDetailedView/ActionItem.tsx @@ -4,7 +4,7 @@ import getStep from 'lib/getStep'; import { generateFilterQuery } from 'lib/logs/generateFilterQuery'; import React, { memo, useMemo } from 'react'; import { connect, useDispatch, useSelector } from 'react-redux'; -import { bindActionCreators } from 'redux'; +import { bindActionCreators, Dispatch } from 'redux'; import { ThunkDispatch } from 'redux-thunk'; import { getLogs } from 'store/actions/logs/getLogs'; import { getLogsAggregate } from 'store/actions/logs/getLogsAggregate'; @@ -46,7 +46,7 @@ function ActionItem({ liveTail, idEnd, } = useSelector((store) => store.logs); - const dispatch = useDispatch(); + const dispatch = useDispatch>(); const { maxTime, minTime } = useSelector( (state) => state.globalTime, @@ -62,7 +62,9 @@ function ActionItem({ } dispatch({ type: SET_SEARCH_QUERY_STRING, - payload: updatedQueryString, + payload: { + searchQueryString: updatedQueryString, + }, }); if (liveTail === 'STOPPED') { diff --git a/frontend/src/container/LogDetailedView/TableView.tsx b/frontend/src/container/LogDetailedView/TableView.tsx index 5058be2fe1..fe84c67fe3 100644 --- a/frontend/src/container/LogDetailedView/TableView.tsx +++ b/frontend/src/container/LogDetailedView/TableView.tsx @@ -64,7 +64,6 @@ function TableView({ logData }: TableViewProps): JSX.Element | null { if (!RESTRICTED_FIELDS.includes(fieldKey[0])) { return ( - {' '} {renderedField} ); diff --git a/frontend/src/container/LogsFilters/FieldItem.tsx b/frontend/src/container/LogsFilters/FieldItem.tsx index ade717bcca..a62b16d1fc 100644 --- a/frontend/src/container/LogsFilters/FieldItem.tsx +++ b/frontend/src/container/LogsFilters/FieldItem.tsx @@ -1,20 +1,17 @@ import { LoadingOutlined } from '@ant-design/icons'; -import { Button, Popover, Spin } from 'antd'; +import { Button, Popover, Spin, Typography } from 'antd'; import { useIsDarkMode } from 'hooks/useDarkMode'; -import React, { useState } from 'react'; +import React, { useCallback, useMemo, useState } from 'react'; +import { + IField, + IInterestingFields, + ISelectedFields, +} from 'types/api/logs/fields'; +import { ICON_STYLE } from './config'; import { Field } from './styles'; -interface FieldItemProps { - name: string; - buttonIcon: React.ReactNode; - buttonOnClick: (arg0: Record) => void; - fieldData: Record; - fieldIndex: number; - isLoading: boolean; - iconHoverText: string; -} -export function FieldItem({ +function FieldItem({ name, buttonIcon, buttonOnClick, @@ -23,33 +20,65 @@ export function FieldItem({ isLoading, iconHoverText, }: FieldItemProps): JSX.Element { - const [isHovered, setIsHovered] = useState(false); + const [isHovered, setIsHovered] = useState(false); const isDarkMode = useIsDarkMode(); + + const onClickHandler = useCallback(() => { + if (!isLoading && buttonOnClick) buttonOnClick({ fieldData, fieldIndex }); + }, [buttonOnClick, fieldData, fieldIndex, isLoading]); + + const renderContent = useMemo(() => { + if (isLoading) { + return } />; + } + + if (isHovered) { + return ( + {iconHoverText}}> +