- {dayjs(log.timestamp).format('MMM DD HH:mm:ss.SSS')}
+ {formatTimezoneAdjustedTimestamp(
+ log.timestamp,
+ 'MMM DD HH:mm:ss.SSS (UTC Z)',
+ )}
{record},
- createdAt: ({ record }) => (
+function CreatedAtComponent({ record }: { record: Record }): JSX.Element {
+ const { formatTimezoneAdjustedTimestamp } = useTimezone();
+ return (
- {dayjs(record).locale('en').format('MMMM DD, YYYY hh:mm A')}
+ {formatTimezoneAdjustedTimestamp(record, 'MMMM DD, YYYY hh:mm A (UTC Z)')}
- ),
+ );
+}
+
+const componentMap: ComponentMap = {
+ orderId: ({ record }) =>
{record},
+ createdAt: ({ record }) =>
,
id: ({ record }) =>
{record},
name: ({ record }) =>
{record},
filter: ({ record }) =>
,
diff --git a/frontend/src/container/PipelinePage/tests/PipelineListsView.test.tsx b/frontend/src/container/PipelinePage/tests/PipelineListsView.test.tsx
index 517e623ebe5..7c2b1e496dc 100644
--- a/frontend/src/container/PipelinePage/tests/PipelineListsView.test.tsx
+++ b/frontend/src/container/PipelinePage/tests/PipelineListsView.test.tsx
@@ -1,6 +1,7 @@
/* eslint-disable sonarjs/no-duplicate-string */
import { findByText, render, waitFor } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
+import TimezoneProvider from 'providers/Timezone';
import { I18nextProvider } from 'react-i18next';
import { QueryClient, QueryClientProvider } from 'react-query';
import { Provider } from 'react-redux';
@@ -70,14 +71,16 @@ describe('PipelinePage container test', () => {
-
+
+
+
,
@@ -107,14 +110,16 @@ describe('PipelinePage container test', () => {
-
+
+
+
,
@@ -144,14 +149,16 @@ describe('PipelinePage container test', () => {
-
+
+
+
,
@@ -209,14 +216,16 @@ describe('PipelinePage container test', () => {
-
+
+
+
diff --git a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearch/index.tsx b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearch/index.tsx
index ba30d96d9c5..9d0fbed8cbb 100644
--- a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearch/index.tsx
+++ b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearch/index.tsx
@@ -72,6 +72,8 @@ function QueryBuilderSearch({
className,
placeholder,
suffixIcon,
+ isInfraMonitoring,
+ disableNavigationShortcuts,
}: QueryBuilderSearchProps): JSX.Element {
const { pathname } = useLocation();
const isLogsExplorerPage = useMemo(() => pathname === ROUTES.LOGS_EXPLORER, [
@@ -93,7 +95,12 @@ function QueryBuilderSearch({
searchKey,
key,
exampleQueries,
- } = useAutoComplete(query, whereClauseConfig, isLogsExplorerPage);
+ } = useAutoComplete(
+ query,
+ whereClauseConfig,
+ isLogsExplorerPage,
+ isInfraMonitoring,
+ );
const [isOpen, setIsOpen] = useState
(false);
const [showAllFilters, setShowAllFilters] = useState(false);
const [dynamicPlacholder, setDynamicPlaceholder] = useState(
@@ -105,6 +112,7 @@ function QueryBuilderSearch({
query,
searchKey,
isLogsExplorerPage,
+ isInfraMonitoring,
);
const { registerShortcut, deregisterShortcut } = useKeyboardHotkeys();
@@ -162,14 +170,22 @@ function QueryBuilderSearch({
if (isMulti || event.key === 'Backspace') handleKeyDown(event);
if (isExistsNotExistsOperator(searchValue)) handleKeyDown(event);
- if ((event.ctrlKey || event.metaKey) && event.key === 'Enter') {
+ if (
+ !disableNavigationShortcuts &&
+ (event.ctrlKey || event.metaKey) &&
+ event.key === 'Enter'
+ ) {
event.preventDefault();
event.stopPropagation();
handleRunQuery();
setIsOpen(false);
}
- if ((event.ctrlKey || event.metaKey) && event.key === '/') {
+ if (
+ !disableNavigationShortcuts &&
+ (event.ctrlKey || event.metaKey) &&
+ event.key === '/'
+ ) {
event.preventDefault();
event.stopPropagation();
setShowAllFilters((prev) => !prev);
@@ -185,8 +201,8 @@ function QueryBuilderSearch({
);
const isMetricsDataSource = useMemo(
- () => query.dataSource === DataSource.METRICS,
- [query.dataSource],
+ () => query.dataSource === DataSource.METRICS && !isInfraMonitoring,
+ [query.dataSource, isInfraMonitoring],
);
const fetchValueDataType = (value: unknown, operator: string): DataTypes => {
@@ -250,7 +266,7 @@ function QueryBuilderSearch({
);
useEffect(() => {
- if (isLastQuery) {
+ if (isLastQuery && !disableNavigationShortcuts) {
registerShortcut(LogsExplorerShortcuts.FocusTheSearchBar, () => {
// set timeout is needed here else the select treats the hotkey as input value
setTimeout(() => {
@@ -261,7 +277,12 @@ function QueryBuilderSearch({
return (): void =>
deregisterShortcut(LogsExplorerShortcuts.FocusTheSearchBar);
- }, [deregisterShortcut, isLastQuery, registerShortcut]);
+ }, [
+ deregisterShortcut,
+ disableNavigationShortcuts,
+ isLastQuery,
+ registerShortcut,
+ ]);
useEffect(() => {
if (!isOpen) {
@@ -427,6 +448,8 @@ interface QueryBuilderSearchProps {
className?: string;
placeholder?: string;
suffixIcon?: React.ReactNode;
+ isInfraMonitoring?: boolean;
+ disableNavigationShortcuts?: boolean;
}
QueryBuilderSearch.defaultProps = {
@@ -434,6 +457,8 @@ QueryBuilderSearch.defaultProps = {
className: '',
placeholder: PLACEHOLDER,
suffixIcon: undefined,
+ isInfraMonitoring: false,
+ disableNavigationShortcuts: false,
};
export interface CustomTagProps {
diff --git a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx
index b3d2b2537a5..b273de05aea 100644
--- a/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx
+++ b/frontend/src/container/QueryBuilder/filters/QueryBuilderSearchV2/QueryBuilderSearchV2.tsx
@@ -897,12 +897,14 @@ function QueryBuilderSearchV2(