mirror of
https://github.com/apache/superset.git
synced 2026-05-31 05:09:20 +00:00
fix(table): fix cross-filter not clearing on second click in Interactive Table (#39253)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
committed by
GitHub
parent
44e77fdf2b
commit
c2d96e0dce
@@ -27,15 +27,11 @@ type GetCellClassParams = CellClassParams & {
|
||||
|
||||
const getCellClass = (params: GetCellClassParams) => {
|
||||
const { col, emitCrossFilters } = params;
|
||||
const isActiveFilterValue = params?.context?.isActiveFilterValue;
|
||||
let className = '';
|
||||
if (emitCrossFilters) {
|
||||
if (!col?.isMetric) {
|
||||
className += ' dt-is-filter';
|
||||
}
|
||||
if (isActiveFilterValue?.(col?.key, params?.value)) {
|
||||
className += ' dt-is-active-filter';
|
||||
}
|
||||
if (col?.config?.truncateLongCells) {
|
||||
className += ' dt-truncate-cell';
|
||||
}
|
||||
|
||||
@@ -34,6 +34,55 @@ type GetCrossFilterDataMaskProps = {
|
||||
timestampFormatter: (value: DataRecordValue) => string;
|
||||
};
|
||||
|
||||
type BuildSelectionCrossFilterProps = {
|
||||
key: string;
|
||||
values: DataRecordValue[];
|
||||
timeGrain?: TimeGranularity;
|
||||
timestampFormatter: (value: DataRecordValue) => string;
|
||||
};
|
||||
|
||||
export const buildSelectionCrossFilterDataMask = ({
|
||||
key,
|
||||
values,
|
||||
timeGrain,
|
||||
timestampFormatter,
|
||||
}: BuildSelectionCrossFilterProps) => {
|
||||
if (values.length === 0) {
|
||||
return {
|
||||
dataMask: {
|
||||
extraFormData: { filters: [] },
|
||||
filterState: { label: null, value: null, filters: null },
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const updatedFilters: DataRecordFilters = { [key]: values };
|
||||
const isTimestamp = key === DTTM_ALIAS;
|
||||
const label = values
|
||||
.map(v => (isTimestamp ? timestampFormatter(v) : v))
|
||||
.join(', ');
|
||||
|
||||
return {
|
||||
dataMask: {
|
||||
extraFormData: {
|
||||
filters: [
|
||||
{
|
||||
col: key,
|
||||
op: 'IN' as const,
|
||||
val: values.map(el => (el instanceof Date ? el.getTime() : el!)),
|
||||
grain: isTimestamp ? timeGrain : undefined,
|
||||
},
|
||||
],
|
||||
},
|
||||
filterState: {
|
||||
label,
|
||||
value: [values],
|
||||
filters: updatedFilters,
|
||||
},
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
export const getCrossFilterDataMask = ({
|
||||
key,
|
||||
value,
|
||||
|
||||
Reference in New Issue
Block a user