/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React from 'react'; import { EuiLink, EuiPopoverFooter, EuiPopoverTitle, EuiText } from '@elastic/eui'; import { i18n } from '@osd/i18n'; import { IndexPatternField } from '../../../../../data/public'; import { useIndexPatterns, useOnAddFilter } from '../../utils/use'; import { FieldBucket } from './field_bucket'; import { Bucket, FieldDetails } from './types'; interface FieldDetailsProps { field: IndexPatternField; details: FieldDetails; } export function FieldDetailsView({ field, details }: FieldDetailsProps) { const { buckets, error, exists, total } = details; const onAddFilter = useOnAddFilter(); const indexPattern = useIndexPatterns().selected; const { metaFields = [] } = indexPattern ?? {}; const isMetaField = metaFields.includes(field.name); const shouldAllowExistsFilter = !isMetaField && !field.scripted; const bucketsTitle = buckets.length > 1 ? i18n.translate('visBuilder.fieldSelector.detailsView.fieldTopValuesLabel', { defaultMessage: 'Top {n} values', values: { n: buckets.length }, }) : i18n.translate('visBuilder.fieldSelector.detailsView.fieldTopValueLabel', { defaultMessage: 'Top value', }); const errorTitle = i18n.translate('visBuilder.fieldSelector.detailsView.fieldNoValuesLabel', { defaultMessage: 'No values found', }); const existsIn = i18n.translate('visBuilder.fieldSelector.detailsView.fieldExistsIn', { defaultMessage: 'Exists in {exists}', values: { exists }, }); const totalRecords = i18n.translate('visBuilder.fieldSelector.detailsView.fieldTotalRecords', { defaultMessage: '/ {total} records', values: { total }, }); const title = buckets.length ? bucketsTitle : errorTitle; return ( <> {title}
{error ? ( {error} ) : (
{buckets.map((bucket: Bucket, idx: number) => ( ))}
)}
{!error && ( {shouldAllowExistsFilter ? ( onAddFilter('_exists_', field.name, '+')} data-test-subj="fieldDetailsExistsLink" > {existsIn} ) : ( <>{exists} )}{' '} {totalRecords} )} ); }