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:
Maxime Beauchemin
2026-04-15 10:30:36 -07:00
committed by GitHub
parent 44e77fdf2b
commit c2d96e0dce
8 changed files with 369 additions and 54 deletions

View File

@@ -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';
}

View File

@@ -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,