From 92207a1becbdf4dfd8063ea2676e519d5ac274f4 Mon Sep 17 00:00:00 2001 From: ananzh Date: Fri, 25 Aug 2023 06:11:27 +0000 Subject: [PATCH] [Data Explorer]Fix display for index pattern without a default time field Issue Resolve https://github.com/opensearch-project/OpenSearch-Dashboards/issues/4820 Signed-off-by: ananzh --- .../application/components/chart/chart.tsx | 8 ++--- .../doc_views_components/context_app.tsx | 9 +++-- .../canvas/discover_chart_container.tsx | 33 +++++++++---------- .../view_components/canvas/discover_table.tsx | 16 +++++++-- .../view_components/canvas/top_nav.tsx | 13 +++++--- 5 files changed, 49 insertions(+), 30 deletions(-) diff --git a/src/plugins/discover/public/application/components/chart/chart.tsx b/src/plugins/discover/public/application/components/chart/chart.tsx index 80692927a002..02606d8a878f 100644 --- a/src/plugins/discover/public/application/components/chart/chart.tsx +++ b/src/plugins/discover/public/application/components/chart/chart.tsx @@ -23,7 +23,7 @@ interface DiscoverChartProps { data: DataPublicPluginStart; hits: number; resetQuery: () => void; - timeField?: string; + isTimeBased?: boolean; services: DiscoverServices; } @@ -34,7 +34,7 @@ export const DiscoverChart = ({ data, hits, resetQuery, - timeField, + isTimeBased, services, }: DiscoverChartProps) => { const { from, to } = data.query.timefilter.timefilter.getTime(); @@ -61,7 +61,7 @@ export const DiscoverChart = ({ 0 ? hits : 0} showResetButton={false} onResetQuery={resetQuery} /> - {timeField && ( + {isTimeBased && ( )} - {timeField && chartData && ( + {isTimeBased && chartData && (
!uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING, false) && indexPattern?.isTimeBased(), + [indexPattern, uiSettings] + ); + return ( {}} sort={sort} rows={rows} - displayTimeColumn={true} + displayTimeColumn={displayTimeColumn || true} services={services} isToolbarVisible={false} /> diff --git a/src/plugins/discover/public/application/view_components/canvas/discover_chart_container.tsx b/src/plugins/discover/public/application/view_components/canvas/discover_chart_container.tsx index 3e421516abcd..f83a789ada99 100644 --- a/src/plugins/discover/public/application/view_components/canvas/discover_chart_container.tsx +++ b/src/plugins/discover/public/application/view_components/canvas/discover_chart_container.tsx @@ -4,7 +4,7 @@ */ import './discover_chart_container.scss'; -import React from 'react'; +import React, { useMemo } from 'react'; import { DiscoverViewServices } from '../../../build_services'; import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; import { useDiscoverContext } from '../context'; @@ -16,23 +16,22 @@ export const DiscoverChartContainer = ({ hits, bucketInterval, chartData }: Sear const { uiSettings, data } = services; const { indexPattern } = useDiscoverContext(); - const timeField = indexPattern?.timeFieldName; - - if (!hits || !bucketInterval || !chartData) { - // TODO: handle better - return null; - } + const isTimeBased = useMemo(() => (indexPattern ? indexPattern.isTimeBased() : false), [ + indexPattern, + ]); return ( - {}} - services={services} - /> + hits && ( + {}} + services={services} + /> + ) ); }; diff --git a/src/plugins/discover/public/application/view_components/canvas/discover_table.tsx b/src/plugins/discover/public/application/view_components/canvas/discover_table.tsx index c43d3fcbe80e..50765aa8aab1 100644 --- a/src/plugins/discover/public/application/view_components/canvas/discover_table.tsx +++ b/src/plugins/discover/public/application/view_components/canvas/discover_table.tsx @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { useState, useEffect, useCallback } from 'react'; +import React, { useState, useEffect, useCallback, useMemo } from 'react'; import { History } from 'history'; import { DiscoverViewServices } from '../../../build_services'; import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; @@ -20,6 +20,7 @@ import { import { ResultStatus, SearchData } from '../utils/use_search'; import { IndexPatternField, opensearchFilters } from '../../../../../data/public'; import { DocViewFilterFn } from '../../doc_views_components/doc_views/doc_views_types'; +import { DOC_HIDE_TIME_COLUMN_SETTING } from '../../../../common'; interface Props { history: History; @@ -27,7 +28,12 @@ interface Props { export const DiscoverTable = ({ history }: Props) => { const { services } = useOpenSearchDashboards(); - const { filterManager } = services.data.query; + const { + uiSettings, + data: { + query: { filterManager }, + }, + } = services; const { data$, indexPattern } = useDiscoverContext(); const [fetchState, setFetchState] = useState({ status: data$.getValue().status, @@ -54,6 +60,10 @@ export const DiscoverTable = ({ history }: Props) => { }, [filterManager, indexPattern] ); + const displayTimeColumn = useMemo( + () => !uiSettings.get(DOC_HIDE_TIME_COLUMN_SETTING, false) && indexPattern?.isTimeBased(), + [indexPattern, uiSettings] + ); const { rows } = fetchState || {}; @@ -90,7 +100,7 @@ export const DiscoverTable = ({ history }: Props) => { onSort={onSetSort} sort={sort} rows={rows} - displayTimeColumn={true} + displayTimeColumn={displayTimeColumn || true} services={services} /> ); diff --git a/src/plugins/discover/public/application/view_components/canvas/top_nav.tsx b/src/plugins/discover/public/application/view_components/canvas/top_nav.tsx index 43681ff023b5..d8befd7d9f74 100644 --- a/src/plugins/discover/public/application/view_components/canvas/top_nav.tsx +++ b/src/plugins/discover/public/application/view_components/canvas/top_nav.tsx @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { AppMountParameters } from '../../../../../../core/public'; import { NEW_DISCOVER_APP, PLUGIN_ID } from '../../../../common'; import { useOpenSearchDashboards } from '../../../../../opensearch_dashboards_react/public'; @@ -20,7 +20,7 @@ export interface TopNavProps { export const TopNav = ({ opts }: TopNavProps) => { const { services } = useOpenSearchDashboards(); - const { inspectorAdapters, savedSearch } = useDiscoverContext(); + const { inspectorAdapters, savedSearch, indexPattern } = useDiscoverContext(); const [indexPatterns, setIndexPatterns] = useState(undefined); const { @@ -52,11 +52,11 @@ export const TopNav = ({ opts }: TopNavProps) => { let isMounted = true; const getDefaultIndexPattern = async () => { await data.indexPatterns.ensureDefaultIndexPattern(); - const indexPattern = await data.indexPatterns.getDefault(); + const defaultIndexPattern = await data.indexPatterns.getDefault(); if (!isMounted) return; - setIndexPatterns(indexPattern ? [indexPattern] : undefined); + setIndexPatterns(defaultIndexPattern ? [defaultIndexPattern] : undefined); }; getDefaultIndexPattern(); @@ -66,11 +66,16 @@ export const TopNav = ({ opts }: TopNavProps) => { }; }, [data.indexPatterns]); + const showDatePicker = useMemo(() => (indexPattern ? indexPattern.isTimeBased() : false), [ + indexPattern, + ]); + return (