diff --git a/superset-frontend/spec/javascripts/explore/components/AdhocFilterOption_spec.jsx b/superset-frontend/spec/javascripts/explore/components/AdhocFilterOption_spec.jsx deleted file mode 100644 index 20433d6c909..00000000000 --- a/superset-frontend/spec/javascripts/explore/components/AdhocFilterOption_spec.jsx +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF 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. - */ -/* eslint-disable no-unused-expressions */ -import React from 'react'; -import sinon from 'sinon'; -import { shallow } from 'enzyme'; -import Popover from 'src/components/Popover'; - -import AdhocFilter, { - EXPRESSION_TYPES, - CLAUSES, -} from 'src/explore/components/controls/FilterControl/AdhocFilter'; -import AdhocFilterOption from 'src/explore/components/controls/FilterControl/AdhocFilterOption'; - -const simpleAdhocFilter = new AdhocFilter({ - expressionType: EXPRESSION_TYPES.SIMPLE, - subject: 'value', - operator: '>', - comparator: '10', - clause: CLAUSES.WHERE, -}); - -function setup(overrides) { - const onFilterEdit = sinon.spy(); - const props = { - adhocFilter: simpleAdhocFilter, - onFilterEdit, - options: [], - datasource: {}, - ...overrides, - }; - const wrapper = shallow(); - return { wrapper }; -} - -describe('AdhocFilterOption', () => { - it('renders an overlay trigger wrapper for the label', () => { - const { wrapper } = setup(); - const overlay = wrapper.find('AdhocFilterPopoverTrigger').shallow(); - const popover = overlay.find(Popover); - expect(popover).toHaveLength(1); - expect(popover.props().defaultVisible).toBe(false); - expect(overlay.find('OptionControlLabel')).toExist(); - }); -}); diff --git a/superset-frontend/spec/javascripts/explore/AdhocFilter_spec.js b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilter/AdhocFilter.test.js similarity index 100% rename from superset-frontend/spec/javascripts/explore/AdhocFilter_spec.js rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilter/AdhocFilter.test.js diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilter.js b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilter/index.js similarity index 100% rename from superset-frontend/src/explore/components/controls/FilterControl/AdhocFilter.js rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilter/index.js diff --git a/superset-frontend/spec/javascripts/explore/components/AdhocFilterControl_spec.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx similarity index 97% rename from superset-frontend/spec/javascripts/explore/components/AdhocFilterControl_spec.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx index 0ca726d8583..5f93d7ea9bc 100644 --- a/superset-frontend/spec/javascripts/explore/components/AdhocFilterControl_spec.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/AdhocFilterControl.test.jsx @@ -28,8 +28,8 @@ import AdhocFilter, { } from 'src/explore/components/controls/FilterControl/AdhocFilter'; import { LabelsContainer } from 'src/explore/components/controls/OptionControls'; import { AGGREGATES, OPERATORS } from 'src/explore/constants'; -import AdhocFilterControl from 'src/explore/components/controls/FilterControl/AdhocFilterControl'; import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric'; +import AdhocFilterControl from '.'; const simpleAdhocFilter = new AdhocFilter({ expressionType: EXPRESSION_TYPES.SIMPLE, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.jsx similarity index 95% rename from superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.jsx index cea9ffed6dc..2354e3f1509 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterControl/index.jsx @@ -39,11 +39,14 @@ import { LabelsContainer, } from 'src/explore/components/controls/OptionControls'; import Icon from 'src/components/Icon'; -import columnType from './columnType'; -import AdhocFilterPopoverTrigger from './AdhocFilterPopoverTrigger'; -import AdhocFilterOption from './AdhocFilterOption'; -import AdhocFilter, { CLAUSES, EXPRESSION_TYPES } from './AdhocFilter'; -import adhocFilterType from './adhocFilterType'; +import AdhocFilterPopoverTrigger from 'src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger'; +import AdhocFilterOption from 'src/explore/components/controls/FilterControl/AdhocFilterOption'; +import AdhocFilter, { + CLAUSES, + EXPRESSION_TYPES, +} from 'src/explore/components/controls/FilterControl/AdhocFilter'; +import adhocFilterType from 'src/explore/components/controls/FilterControl/adhocFilterType'; +import columnType from 'src/explore/components/controls/FilterControl/columnType'; const selectedMetricType = PropTypes.oneOfType([ PropTypes.string, diff --git a/superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopover_spec.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx similarity index 98% rename from superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopover_spec.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx index 492b11260d8..b071acfcf1d 100644 --- a/superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopover_spec.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/AdhocFilterEditPopover.test.jsx @@ -29,10 +29,10 @@ import AdhocFilter, { CLAUSES, } from 'src/explore/components/controls/FilterControl/AdhocFilter'; import { AGGREGATES } from 'src/explore/constants'; -import AdhocFilterEditPopover from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopover'; import AdhocFilterEditPopoverSimpleTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent'; import AdhocFilterEditPopoverSqlTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent'; import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric'; +import AdhocFilterEditPopover from '.'; const simpleAdhocFilter = new AdhocFilter({ expressionType: EXPRESSION_TYPES.SIMPLE, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.jsx similarity index 93% rename from superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.jsx index 90fd0be3467..b44131d8dbb 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopover/index.jsx @@ -24,10 +24,12 @@ import { styled, t } from '@superset-ui/core'; import ErrorBoundary from 'src/components/ErrorBoundary'; import Tabs from 'src/common/components/Tabs'; import adhocMetricType from 'src/explore/components/controls/MetricControl/adhocMetricType'; -import columnType from './columnType'; -import AdhocFilter, { EXPRESSION_TYPES } from './AdhocFilter'; -import AdhocFilterEditPopoverSimpleTabContent from './AdhocFilterEditPopoverSimpleTabContent'; -import AdhocFilterEditPopoverSqlTabContent from './AdhocFilterEditPopoverSqlTabContent'; +import AdhocFilter, { + EXPRESSION_TYPES, +} from 'src/explore/components/controls/FilterControl/AdhocFilter'; +import AdhocFilterEditPopoverSimpleTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent'; +import AdhocFilterEditPopoverSqlTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent'; +import columnType from 'src/explore/components/controls/FilterControl/columnType'; const propTypes = { adhocFilter: PropTypes.instanceOf(AdhocFilter).isRequired, diff --git a/superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopoverSimpleTabContent_spec.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.jsx similarity index 97% rename from superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopoverSimpleTabContent_spec.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.jsx index 01a83cab209..8c57c78dc5c 100644 --- a/superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopoverSimpleTabContent_spec.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/AdhocFilterEditPopoverSimpleTabContent.test.jsx @@ -27,8 +27,8 @@ import AdhocFilter, { CLAUSES, } from 'src/explore/components/controls/FilterControl/AdhocFilter'; import { AGGREGATES } from 'src/explore/constants'; -import AdhocFilterEditPopoverSimpleTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent'; import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric'; +import AdhocFilterEditPopoverSimpleTabContent from '.'; const simpleAdhocFilter = new AdhocFilter({ expressionType: EXPRESSION_TYPES.SIMPLE, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.jsx similarity index 98% rename from superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.jsx index 3fc36101b73..391bb74c8a5 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSimpleTabContent/index.jsx @@ -35,8 +35,11 @@ import { DISABLE_INPUT_OPERATORS, } from 'src/explore/constants'; import FilterDefinitionOption from 'src/explore/components/controls/MetricControl/FilterDefinitionOption'; -import columnType from './columnType'; -import AdhocFilter, { EXPRESSION_TYPES, CLAUSES } from './AdhocFilter'; +import AdhocFilter, { + EXPRESSION_TYPES, + CLAUSES, +} from 'src/explore/components/controls/FilterControl/AdhocFilter'; +import columnType from 'src/explore/components/controls/FilterControl/columnType'; const SelectWithLabel = styled(Select)` .ant-select-selector::after { diff --git a/superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopoverSqlTabContent_spec.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.jsx similarity index 94% rename from superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopoverSqlTabContent_spec.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.jsx index e0da5e08c01..09b0d4ea488 100644 --- a/superset-frontend/spec/javascripts/explore/components/AdhocFilterEditPopoverSqlTabContent_spec.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/AdhocFilterEditPopoverSqlTabContent.test.jsx @@ -26,7 +26,7 @@ import AdhocFilter, { EXPRESSION_TYPES, CLAUSES, } from 'src/explore/components/controls/FilterControl/AdhocFilter'; -import AdhocFilterEditPopoverSqlTabContent from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent'; +import AdhocFilterEditPopoverSqlTabContent from '.'; const sqlAdhocFilter = new AdhocFilter({ expressionType: EXPRESSION_TYPES.SQL, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/index.jsx similarity index 95% rename from superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/index.jsx index 7432bd7ac33..3c06a5b7aca 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterEditPopoverSqlTabContent/index.jsx @@ -25,8 +25,11 @@ import { SQLEditor } from 'src/components/AsyncAceEditor'; import sqlKeywords from 'src/SqlLab/utils/sqlKeywords'; import adhocMetricType from 'src/explore/components/controls/MetricControl/adhocMetricType'; -import columnType from './columnType'; -import AdhocFilter, { EXPRESSION_TYPES, CLAUSES } from './AdhocFilter'; +import columnType from 'src/explore/components/controls/FilterControl/columnType'; +import AdhocFilter, { + EXPRESSION_TYPES, + CLAUSES, +} from 'src/explore/components/controls/FilterControl/AdhocFilter'; const propTypes = { adhocFilter: PropTypes.instanceOf(AdhocFilter).isRequired, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption/AdhocFilterOption.test.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption/AdhocFilterOption.test.tsx new file mode 100644 index 00000000000..48a813fdac5 --- /dev/null +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption/AdhocFilterOption.test.tsx @@ -0,0 +1,90 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 from 'react'; +import { render, screen } from 'spec/helpers/testing-library'; +import userEvent from '@testing-library/user-event'; +import { HTML5Backend } from 'react-dnd-html5-backend'; +import { DndProvider } from 'react-dnd'; +import AdhocFilter, { + EXPRESSION_TYPES, + CLAUSES, +} from 'src/explore/components/controls/FilterControl/AdhocFilter'; +import AdhocFilterOption from '.'; + +const simpleAdhocFilter = new AdhocFilter({ + expressionType: EXPRESSION_TYPES.SIMPLE, + subject: 'value', + operator: '>', + comparator: '10', + clause: CLAUSES.WHERE, +}); + +const options = [ + { type: 'VARCHAR(255)', column_name: 'source', id: 1 }, + { type: 'VARCHAR(255)', column_name: 'target', id: 2 }, + { type: 'DOUBLE', column_name: 'value', id: 3 }, +]; + +const mockedProps = { + adhocFilter: simpleAdhocFilter, + onFilterEdit: jest.fn(), + options, +}; + +const setup = (props: { + adhocFilter: typeof simpleAdhocFilter; + onFilterEdit: () => void; + options: { + type: string; + column_name: string; + id: number; + }[]; +}) => ( + + + +); + +test('should render', () => { + const { container } = render(setup(mockedProps)); + expect(container).toBeInTheDocument(); +}); + +test('should render the control label', () => { + render(setup(mockedProps)); + expect(screen.getByText('value > 10')).toBeInTheDocument(); +}); + +test('should render the remove button', () => { + render(setup(mockedProps)); + const removeBtn = screen.getByRole('button'); + expect(removeBtn).toBeInTheDocument(); +}); + +test('should render the right caret', () => { + render(setup(mockedProps)); + expect(screen.getByTestId('caret-right')).toBeInTheDocument(); +}); + +test('should render the Popover on clicking the right caret', () => { + render(setup(mockedProps)); + const rightCaret = screen.getByRole('img', { name: 'caret-right' }); + userEvent.click(rightCaret); + expect(screen.getByRole('tooltip')).toBeInTheDocument(); +}); diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption.jsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption/index.jsx similarity index 89% rename from superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption.jsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption/index.jsx index 4c866875b17..222979cbf9f 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption.jsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterOption/index.jsx @@ -21,9 +21,9 @@ import PropTypes from 'prop-types'; import adhocMetricType from 'src/explore/components/controls/MetricControl/adhocMetricType'; import { OptionControlLabel } from 'src/explore/components/controls/OptionControls'; import { DndItemType } from 'src/explore/components/DndItemType'; -import columnType from './columnType'; -import AdhocFilterPopoverTrigger from './AdhocFilterPopoverTrigger'; -import AdhocFilter from './AdhocFilter'; +import columnType from 'src/explore/components/controls/FilterControl/columnType'; +import AdhocFilterPopoverTrigger from 'src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger'; +import AdhocFilter from 'src/explore/components/controls/FilterControl/AdhocFilter'; const propTypes = { adhocFilter: PropTypes.instanceOf(AdhocFilter).isRequired, diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/AdhocFilterPopoverTrigger.test.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/AdhocFilterPopoverTrigger.test.tsx new file mode 100644 index 00000000000..92d0ca801a1 --- /dev/null +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/AdhocFilterPopoverTrigger.test.tsx @@ -0,0 +1,93 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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 from 'react'; +import { render, screen } from 'spec/helpers/testing-library'; +import userEvent from '@testing-library/user-event'; +import AdhocFilter, { + EXPRESSION_TYPES, + CLAUSES, +} from 'src/explore/components/controls/FilterControl/AdhocFilter'; +import AdhocFilterPopoverTrigger from '.'; + +const simpleAdhocFilter = new AdhocFilter({ + expressionType: EXPRESSION_TYPES.SIMPLE, + subject: 'value', + operator: '>', + comparator: '10', + clause: CLAUSES.WHERE, +}); + +const mockedProps = { + adhocFilter: simpleAdhocFilter, + options: [], + datasource: {}, + onFilterEdit: jest.fn(), +}; + +test('should render', () => { + const { container } = render( + + Click + , + ); + expect(container).toBeInTheDocument(); +}); + +test('should render the Popover on click when uncontrolled', () => { + render( + + Click + , + ); + expect(screen.queryByRole('tooltip')).not.toBeInTheDocument(); + userEvent.click(screen.getByText('Click')); + expect(screen.getByRole('tooltip')).toBeInTheDocument(); +}); + +test('should be visible when controlled', async () => { + const controlledProps = { + ...mockedProps, + isControlledComponent: true, + visible: true, + togglePopover: jest.fn(), + closePopover: jest.fn(), + }; + render( + + Click + , + ); + expect(screen.getByRole('tooltip')).toBeInTheDocument(); +}); + +test('should NOT be visible when controlled', () => { + const controlledProps = { + ...mockedProps, + isControlledComponent: true, + visible: false, + togglePopover: jest.fn(), + closePopover: jest.fn(), + }; + render( + + Click + , + ); + expect(screen.queryByRole('tooltip')).not.toBeInTheDocument(); +}); diff --git a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger.tsx b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/index.tsx similarity index 94% rename from superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger.tsx rename to superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/index.tsx index 43c2b569159..45fe11fc986 100644 --- a/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger.tsx +++ b/superset-frontend/src/explore/components/controls/FilterControl/AdhocFilterPopoverTrigger/index.tsx @@ -19,8 +19,8 @@ import React from 'react'; import Popover from 'src/components/Popover'; import { OptionSortType } from 'src/explore/types'; -import AdhocFilterEditPopover from './AdhocFilterEditPopover'; -import AdhocFilter from './AdhocFilter'; +import AdhocFilterEditPopover from 'src/explore/components/controls/FilterControl/AdhocFilterEditPopover'; +import AdhocFilter from 'src/explore/components/controls/FilterControl/AdhocFilter'; interface AdhocFilterPopoverTriggerProps { adhocFilter: AdhocFilter;