mirror of
https://github.com/apache/superset.git
synced 2026-07-19 21:25:38 +00:00
feat(explore): Clear temporal filter value (#27788)
This commit is contained in:
committed by
GitHub
parent
e80d194b8f
commit
4ecfce98f6
@@ -37,6 +37,7 @@ import {
|
||||
import type { AsyncAceEditorProps } from 'src/components/AsyncAceEditor';
|
||||
import AdhocMetric from 'src/explore/components/controls/MetricControl/AdhocMetric';
|
||||
import AdhocFilter from 'src/explore/components/controls/FilterControl/AdhocFilter';
|
||||
import { Operators } from 'src/explore/constants';
|
||||
import {
|
||||
DndFilterSelect,
|
||||
DndFilterSelectProps,
|
||||
@@ -78,11 +79,13 @@ function setup({
|
||||
formData = baseFormData,
|
||||
columns = [],
|
||||
datasource = PLACEHOLDER_DATASOURCE,
|
||||
additionalProps = {},
|
||||
}: {
|
||||
value?: AdhocFilter;
|
||||
value?: AdhocFilter | AdhocFilter[];
|
||||
formData?: QueryFormData;
|
||||
columns?: ColumnMeta[];
|
||||
datasource?: Datasource;
|
||||
additionalProps?: Partial<DndFilterSelectProps>;
|
||||
} = {}) {
|
||||
return (
|
||||
<DndFilterSelect
|
||||
@@ -91,10 +94,15 @@ function setup({
|
||||
value={ensureIsArray(value)}
|
||||
formData={formData}
|
||||
columns={columns}
|
||||
{...additionalProps}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
jest.clearAllMocks();
|
||||
});
|
||||
|
||||
test('renders with default props', async () => {
|
||||
render(setup(), { useDnd: true, store });
|
||||
expect(
|
||||
@@ -248,6 +256,73 @@ test('cannot drop a column that is not part of the simple column selection', ()
|
||||
).toHaveTextContent('AGG(metric_a)');
|
||||
});
|
||||
|
||||
test('calls onChange when close is clicked and canDelete is true', () => {
|
||||
const value1 = new AdhocFilter({
|
||||
sqlExpression: 'COUNT(*)',
|
||||
expressionType: ExpressionTypes.Sql,
|
||||
});
|
||||
const value2 = new AdhocFilter({
|
||||
expressionType: ExpressionTypes.Simple,
|
||||
subject: 'col',
|
||||
comparator: 'val',
|
||||
operator: Operators.Equals,
|
||||
});
|
||||
const canDelete = jest.fn();
|
||||
canDelete.mockReturnValue(true);
|
||||
render(setup({ value: [value1, value2], additionalProps: { canDelete } }), {
|
||||
useDnd: true,
|
||||
store,
|
||||
});
|
||||
fireEvent.click(screen.getAllByTestId('remove-control-button')[0]);
|
||||
expect(canDelete).toHaveBeenCalled();
|
||||
expect(defaultProps.onChange).toHaveBeenCalledWith([value2]);
|
||||
});
|
||||
|
||||
test('onChange is not called when close is clicked and canDelete is false', () => {
|
||||
const value1 = new AdhocFilter({
|
||||
sqlExpression: 'COUNT(*)',
|
||||
expressionType: ExpressionTypes.Sql,
|
||||
});
|
||||
const value2 = new AdhocFilter({
|
||||
expressionType: ExpressionTypes.Simple,
|
||||
subject: 'col',
|
||||
comparator: 'val',
|
||||
operator: Operators.Equals,
|
||||
});
|
||||
const canDelete = jest.fn();
|
||||
canDelete.mockReturnValue(false);
|
||||
render(setup({ value: [value1, value2], additionalProps: { canDelete } }), {
|
||||
useDnd: true,
|
||||
store,
|
||||
});
|
||||
fireEvent.click(screen.getAllByTestId('remove-control-button')[0]);
|
||||
expect(canDelete).toHaveBeenCalled();
|
||||
expect(defaultProps.onChange).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
test('onChange is not called when close is clicked and canDelete is string, warning is displayed', async () => {
|
||||
const value1 = new AdhocFilter({
|
||||
sqlExpression: 'COUNT(*)',
|
||||
expressionType: ExpressionTypes.Sql,
|
||||
});
|
||||
const value2 = new AdhocFilter({
|
||||
expressionType: ExpressionTypes.Simple,
|
||||
subject: 'col',
|
||||
comparator: 'val',
|
||||
operator: Operators.Equals,
|
||||
});
|
||||
const canDelete = jest.fn();
|
||||
canDelete.mockReturnValue('Test warning');
|
||||
render(setup({ value: [value1, value2], additionalProps: { canDelete } }), {
|
||||
useDnd: true,
|
||||
store,
|
||||
});
|
||||
fireEvent.click(screen.getAllByTestId('remove-control-button')[0]);
|
||||
expect(canDelete).toHaveBeenCalled();
|
||||
expect(defaultProps.onChange).not.toHaveBeenCalled();
|
||||
expect(await screen.findByText('Test warning')).toBeInTheDocument();
|
||||
});
|
||||
|
||||
describe('when disallow_adhoc_metrics is set', () => {
|
||||
test('can drop a column type from the simple column selection', () => {
|
||||
const adhocMetric = new AdhocMetric({
|
||||
|
||||
@@ -232,7 +232,9 @@ const DndFilterSelect = (props: DndFilterSelectProps) => {
|
||||
warning({ title: t('Warning'), content: result });
|
||||
return;
|
||||
}
|
||||
removeValue(index);
|
||||
if (result === true) {
|
||||
removeValue(index);
|
||||
}
|
||||
},
|
||||
[canDelete, removeValue, values],
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user