/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React from 'react'; import { EuiText, EuiButtonIcon, EuiFlexGroup, EuiFlexItem, EuiSpacer, EuiProgress, } from '@elastic/eui'; import { i18n } from '@osd/i18n'; import { IndexPatternField } from '../../../../../data/public'; import { Bucket } from './types'; import './field_bucket.scss'; import { useOnAddFilter } from '../../utils/use'; interface FieldBucketProps { bucket: Bucket; field: IndexPatternField; } export function FieldBucket({ bucket, field }: FieldBucketProps) { const { count, display, percent, value } = bucket; const { filterable: isFilterableField, name: fieldName } = field; const onAddFilter = useOnAddFilter(); const emptyText = i18n.translate('visBuilder.fieldSelector.detailsView.emptyStringText', { // We need this to communicate to users when a top value is actually an empty string defaultMessage: 'Empty string', }); const addLabel = i18n.translate( 'visBuilder.fieldSelector.detailsView.filterValueButtonAriaLabel', { defaultMessage: 'Filter for {fieldName}: "{value}"', values: { fieldName, value }, } ); const removeLabel = i18n.translate( 'visBuilder.fieldSelector.detailsView.filterOutValueButtonAriaLabel', { defaultMessage: 'Filter out {fieldName}: "{value}"', values: { fieldName, value }, } ); const displayValue = display || emptyText; return ( <> {displayValue} {percent.toFixed(1)}% {/* TODO: Should we have any explanation for non-filterable fields? */} {isFilterableField && (
onAddFilter(field, value, '+')} aria-label={addLabel} data-test-subj={`plus-${fieldName}-${value}`} /> onAddFilter(field, value, '-')} aria-label={removeLabel} data-test-subj={`minus-${fieldName}-${value}`} />
)}
); }