part 2 of filter/sort drill down from charts (#16013)

in this PR, we will handle simple filter translations (ie, fields that
use the contains operand)
This commit is contained in:
nitin
2025-11-25 18:56:55 +05:30
committed by GitHub
parent 2028a8f9be
commit 3be3c4e965
35 changed files with 1097 additions and 245 deletions
@@ -0,0 +1,53 @@
import { type BuildChartDrilldownQueryParamsInput } from '@/page-layout/widgets/graph/types/BuildChartDrilldownQueryParamsInput';
import { buildFilterFromChartBucket } from '@/page-layout/widgets/graph/utils/buildFilterFromChartBucket';
import { buildFilterQueryParams } from '@/page-layout/widgets/graph/utils/buildFilterQueryParams';
import { isDefined } from 'twenty-shared/utils';
export const buildChartDrilldownQueryParams = ({
objectMetadataItem,
configuration,
clickedData,
viewId,
timezone,
}: BuildChartDrilldownQueryParamsInput): URLSearchParams => {
const drilldownQueryParams = new URLSearchParams();
if (isDefined(configuration.filter)) {
const chartFilterParams = buildFilterQueryParams({
recordFilters: configuration.filter.recordFilters ?? [],
recordFilterGroups: configuration.filter.recordFilterGroups ?? [],
objectMetadataItem,
});
chartFilterParams.forEach((value, key) => {
drilldownQueryParams.append(key, value);
});
}
const primaryField = objectMetadataItem.fields.find(
(field) => field.id === configuration.primaryAxisGroupByFieldMetadataId,
);
if (isDefined(primaryField)) {
const primaryFilters = buildFilterFromChartBucket({
fieldMetadataItem: primaryField,
bucketRawValue: clickedData.primaryBucketRawValue,
dateGranularity: configuration.primaryAxisDateGranularity,
subFieldName: configuration.primaryAxisGroupBySubFieldName,
timezone,
});
primaryFilters.forEach((filter) => {
drilldownQueryParams.append(
`filter[${filter.fieldName}][${filter.operand}]`,
filter.value,
);
});
}
if (isDefined(viewId)) {
drilldownQueryParams.set('viewId', viewId);
}
return drilldownQueryParams;
};