Files
twenty/packages/twenty-front/src/modules/page-layout/widgets/graph/hooks/useGraphWidgetQueryCommon.ts
T
2b4fa9d8cf fix: workspace member "me" filters now work in dashboard widgets (#20266)
## Summary

Fixes #20225

Dashboard graph widgets only passed `timeZone` in
`filterValueDependencies` when computing the GraphQL operation filter.
As a result, `isCurrentWorkspaceMemberSelected` ("me") filters were
silently ignored — the current workspace member ID was `undefined`.

Regular view filters already use `useFilterValueDependencies` which
provides both `timeZone` and `currentWorkspaceMemberId`. This PR
replaces the manual `{ timeZone: userTimezone }` object in
`useGraphWidgetQueryCommon` with `useFilterValueDependencies()`, giving
dashboard widgets full feature parity with view filters.

**Changed file:**
`packages/twenty-front/src/modules/page-layout/widgets/graph/hooks/useGraphWidgetQueryCommon.ts`

---------

Co-authored-by: martmull <martmull@hotmail.fr>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-07 12:36:14 +00:00

54 lines
1.5 KiB
TypeScript

import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies';
import {
computeRecordGqlOperationFilter,
isDefined,
} from 'twenty-shared/utils';
import {
type AggregateChartConfiguration,
type BarChartConfiguration,
type LineChartConfiguration,
type PieChartConfiguration,
} from '~/generated-metadata/graphql';
export const useGraphWidgetQueryCommon = ({
objectMetadataItemId,
configuration,
}: {
objectMetadataItemId: string;
configuration:
| BarChartConfiguration
| AggregateChartConfiguration
| LineChartConfiguration
| PieChartConfiguration;
}) => {
const { objectMetadataItem } = useObjectMetadataItemById({
objectId: objectMetadataItemId,
});
const aggregateFieldId = configuration.aggregateFieldMetadataId;
const aggregateField = objectMetadataItem.readableFields.find(
(field: { id: string }) => field.id === aggregateFieldId,
);
if (!isDefined(aggregateField)) {
throw new Error('Aggregate field not found');
}
const { filterValueDependencies } = useFilterValueDependencies();
const gqlOperationFilter = computeRecordGqlOperationFilter({
fields: objectMetadataItem.fields,
filterValueDependencies,
recordFilters: configuration.filter?.recordFilters ?? [],
recordFilterGroups: configuration.filter?.recordFilterGroups ?? [],
});
return {
objectMetadataItem,
gqlOperationFilter,
aggregateField,
};
};