/* * SPDX-License-Identifier: Apache-2.0 * * The OpenSearch Contributors require contributions made to * this file be licensed under the Apache-2.0 license or a * compatible open source license. * * Any modifications Copyright OpenSearch Contributors. See * GitHub history for details. */ /* * Licensed to Elasticsearch B.V. under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch B.V. licenses this file to you under * the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import React, { useMemo, useCallback } from 'react'; import { findLast } from 'lodash'; import { EuiSpacer } from '@elastic/eui'; import { AggGroupNames, IAggConfig, IMetricAggType, search, TimeRange, } from '../../../../data/public'; import { DefaultEditorAggGroup } from '../agg_group'; import { EditorAction, addNewAgg, removeAgg, reorderAggs, setAggParamValue, changeAggType, toggleEnabledAgg, } from './state'; import { AddSchema, ReorderAggs, DefaultEditorAggCommonProps } from '../agg_common_props'; import { ISchemas } from '../../schemas'; import { EditorVisState } from './state/reducers'; export interface DefaultEditorDataTabProps { dispatch: React.Dispatch; formIsTouched: boolean; isTabSelected: boolean; metricAggs: IAggConfig[]; schemas: ISchemas; state: EditorVisState; setTouched(isTouched: boolean): void; setValidity(modelName: string, value: boolean): void; setStateValue: DefaultEditorAggCommonProps['setStateParamValue']; timeRange: TimeRange; } function DefaultEditorDataTab({ dispatch, formIsTouched, metricAggs, schemas, state, setTouched, setValidity, setStateValue, timeRange, }: DefaultEditorDataTabProps) { const lastParentPipelineAgg = useMemo( () => findLast( metricAggs, ({ type }: { type: IMetricAggType }) => type.subtype === search.aggs.parentPipelineType ), [metricAggs] ); const lastParentPipelineAggTitle = lastParentPipelineAgg && (lastParentPipelineAgg as IAggConfig).type.title; const addSchema: AddSchema = useCallback((schema) => dispatch(addNewAgg(schema)), [dispatch]); const onAggRemove: DefaultEditorAggCommonProps['removeAgg'] = useCallback( (aggId) => dispatch(removeAgg(aggId, schemas.all || [])), [dispatch, schemas] ); const onReorderAggs: ReorderAggs = useCallback((...props) => dispatch(reorderAggs(...props)), [ dispatch, ]); const onAggParamValueChange: DefaultEditorAggCommonProps['setAggParamValue'] = useCallback( (...props) => dispatch(setAggParamValue(...props)), [dispatch] ); const onAggTypeChange: DefaultEditorAggCommonProps['onAggTypeChange'] = useCallback( (...props) => dispatch(changeAggType(...props)), [dispatch] ); const onToggleEnableAgg: DefaultEditorAggCommonProps['onToggleEnableAgg'] = useCallback( (...props) => dispatch(toggleEnabledAgg(...props)), [dispatch] ); const commonProps = { addSchema, formIsTouched, lastParentPipelineAggTitle, metricAggs, state, reorderAggs: onReorderAggs, setAggParamValue: onAggParamValueChange, setStateParamValue: setStateValue, onAggTypeChange, onToggleEnableAgg, setValidity, setTouched, removeAgg: onAggRemove, } as any; return ( <> ); } export { DefaultEditorDataTab };