/* * Copyright OpenSearch Contributors * SPDX-License-Identifier: Apache-2.0 */ import React, { useState } from 'react'; import { i18n } from '@osd/i18n'; import { isEqual, toUpper, upperFirst } from 'lodash'; import { EuiPopover, EuiButtonIcon, EuiToolTip, EuiMark, EuiLoadingSpinner, EuiFlexGroup, EuiFlexItem, EuiTitle, } from '@elastic/eui'; import { FieldButton } from '../../../common/field_button'; import { FieldIcon } from '../../../common/field_icon'; import { IField } from '../../../../../common/types/explorer'; import { FieldInsights } from './field_insights'; interface IFieldProps { query: string; field: IField; selectedPattern: string; isOverridingPattern: boolean; handleOverridePattern: (pattern: IField) => void; selectedTimestamp: string; isOverridingTimestamp: boolean; handleOverrideTimestamp: (timestamp: IField) => void; selected: boolean; showToggleButton: boolean; showTimestampOverrideButton: boolean; isFieldToggleButtonDisabled: boolean; onToggleField: (field: IField) => void; } export const Field = (props: IFieldProps) => { const { query, field, selectedPattern, isOverridingPattern, handleOverridePattern, selectedTimestamp, isOverridingTimestamp, handleOverrideTimestamp, selected, isFieldToggleButtonDisabled = false, showTimestampOverrideButton = true, onToggleField, } = props; const [isFieldDetailsOpen, setIsFieldDetailsOpen] = useState(false); const addLabelAria = i18n.translate('addButtonAriaLabel', { defaultMessage: 'Add {field} to table', values: { field: field.name }, }); const removeLabelAria = i18n.translate('removeButtonAriaLabel', { defaultMessage: 'Remove {field} from table', values: { field: field.name }, }); const togglePopover = () => { setIsFieldDetailsOpen((staleState) => !staleState); }; const toggleField = (field: IField) => { onToggleField(field); }; const getFieldActionDOM = () => { return ( <> <> {isEqual(field.type, 'string') ? ( isEqual(selectedPattern, field.name) ? ( Default Pattern ) : isOverridingPattern ? ( ) : ( handleOverridePattern(field)} data-test-subj="eventExplorer__overrideDefaultPattern" > Override ) ) : null} <> {showTimestampOverrideButton && isEqual(field.type, 'timestamp') ? ( isEqual(selectedTimestamp, field.name) ? ( Default Timestamp ) : isOverridingTimestamp ? ( ) : ( handleOverrideTimestamp(field)} data-test-subj="eventExplorer__overrideDefaultTimestamp" > Override ) ) : null} <> {isFieldToggleButtonDisabled ? ( ) : ( ) => { if (e.type === 'click') { e.currentTarget.focus(); } e.preventDefault(); e.stopPropagation(); toggleField(field); }} data-test-subj={`fieldToggle-${field.name}`} aria-label={selected ? removeLabelAria : addLabelAria} /> )} ); }; return ( setIsFieldDetailsOpen(false)} anchorPosition="rightUp" panelClassName="dscSidebarItem__fieldPopoverPanel" button={ } fieldName={ {field.name} } fieldAction={getFieldActionDOM()} onClick={togglePopover} /> } >

{toUpper(field.name)}

{upperFirst(field.type)}
); };