twentyhq/twenty · error · Error
Failed to create view filter group
Error message
Failed to create view filter group
What it means
Thrown in usePerformViewFilterGroupAPIPersist when the createViewFilterGroup mutation resolves but result.data is undefined. As with createView, this indicates the GraphQL response carried no data payload (errors swallowed or partial response).
Source
Thrown at packages/twenty-front/src/modules/views/hooks/internal/usePerformViewFilterGroupAPIPersist.ts:49
} = usePerformViewEntityAPIPersistOperation('viewFilterGroup');
const createViewFilterGroupRecord = useCallback(
async (viewFilterGroup: ViewFilterGroup, view: Pick<GraphQLView, 'id'>) => {
const result = await createViewFilterGroupMutation({
variables: {
input: {
id: viewFilterGroup.id,
viewId: view.id,
parentViewFilterGroupId: viewFilterGroup.parentViewFilterGroupId,
logicalOperator: viewFilterGroup.logicalOperator,
positionInViewFilterGroup:
viewFilterGroup.positionInViewFilterGroup,
},
},
});
if (!isDefined(result.data)) {
throw new Error('Failed to create view filter group');
}
return { newRecord: result.data.createViewFilterGroup };
},
[createViewFilterGroupMutation],
);
const performViewFilterGroupAPICreate = useCallback(
async (
viewFilterGroupsToCreate: ViewFilterGroup[],
view: Pick<GraphQLView, 'id'>,
): Promise<MetadataRequestResult<string[]>> => {
const oldToNewId = new Map<string, string>();
const newRecordIds: string[] = [];
for (const viewFilterGroupToCreate of viewFilterGroupsToCreate) {
const newParentViewFilterGroupId = isDefined(
viewFilterGroupToCreate.parentViewFilterGroupId,View on GitHub (pinned to 1f5dd2bbd2)
Solutions
- Check the createViewFilterGroup response in DevTools for the errors array.
- Validate that viewId is an existing view and parentViewFilterGroupId (if set) exists in the same batch.
- Confirm the logicalOperator is a valid enum value.
Example fix
// before: if (!isDefined(result.data)) { throw new Error('Failed to create view filter group'); }
// after: if (!isDefined(result.data)) {
// throw new Error(result.errors?.[0]?.message ?? 'Failed to create view filter group');
// } Defensive patterns
Strategy: try-catch
Validate before calling
const validateFilterGroupInput = (g: ViewFilterGroup, view: Pick<GraphQLView,'id'>): string[] => {
const errs: string[] = [];
if (!g.id) errs.push('missing id');
if (!view.id) errs.push('missing viewId');
if (!['AND','OR','and','or'].includes(g.logicalOperator ?? '')) errs.push('invalid logicalOperator');
return errs;
}; Type guard
const isCreatableViewFilterGroup = (g: Partial<ViewFilterGroup>): g is ViewFilterGroup => typeof g.id === 'string' && typeof g.logicalOperator === 'string';
Try / catch
try {
await performViewFilterGroupAPICreate(groups, view);
} catch (e) {
showError((e as Error).message); // 'Failed to create view filter group'
} Prevention
- Validate logicalOperator is an allowed enum before submission.
- Ensure parentViewFilterGroupId (if set) exists in the same batch.
- Confirm viewId points to an existing view.
When it happens
Trigger: Server-side validation failure (invalid logicalOperator, missing viewId, orphan parentViewFilterGroupId) returns errors and null data. Network partial response. Permission issue on view filter group creation.
Common situations: Filter group references a parentViewFilterGroupId that does not exist. logicalOperator value not in the allowed enum. Workspace member lacks create permission.
Related errors
- Failed to create view
- Failed to create view
- GraphQL errors: ${json.errors.map((e) => e.message).join(';
- No getAuthTokensFromSSOExchangeToken result
- Field ${fieldMetadata.name} is missing, please refresh the p
AI-assisted analysis of twentyhq/twenty@1f5dd2bbd2 (2026-08-12).
Data as JSON: /api/errors/1b4f9427d030c4a5.
Report an issue: GitHub.