/*
* 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)}
);
};