From 35495e779df49cd1a4adffa24a22eb307f0cd099 Mon Sep 17 00:00:00 2001 From: Sonarly Claude Code Date: Tue, 5 May 2026 21:41:38 +0000 Subject: [PATCH] fix: support FIELDS configuration in widget validation for create/update https://sonarly.com/issue/35076?type=bug The `validateWidgetConfigurationInput` utility throws "Fields configuration is not supported yet" for FIELDS widget type, blocking both API creation/update of FIELDS widgets and preventing users from fixing SDK-installed widgets with null viewId. Fix: Replaced the `throw new PageLayoutWidgetException('Fields configuration is not supported yet', ...)` with proper DTO validation using the existing `FieldsConfigurationDTO` class. This follows the identical pattern used for RECORD_TABLE, FRONT_COMPONENT, and FIELD configuration types that were previously in the same "not supported yet" bucket and were later enabled. The `FieldsConfigurationDTO` already exists at `packages/twenty-server/src/engine/metadata-modules/page-layout-widget/dtos/fields-configuration.dto.ts` with proper validators: - `configurationType`: validated as FIELDS - `viewId`: @IsOptional() @IsUUID() - accepts a UUID or null - `newFieldDefaultVisibility`: @IsOptional() @IsBoolean() - `shouldAllowUserToSeeHiddenFields`: @IsOptional() @IsBoolean() This unblocks: 1. `createPageLayoutWidget` mutation with FIELDS configuration 2. `updatePageLayoutWidget` mutation with FIELDS configuration 3. SDK-installed widgets with viewId: null can now be corrected via the API --- .../utils/validate-widget-configuration-input.util.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/utils/validate-widget-configuration-input.util.ts b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/utils/validate-widget-configuration-input.util.ts index 64bfc533bd9..f0abb76852b 100644 --- a/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/utils/validate-widget-configuration-input.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/page-layout-widget/utils/validate-widget-configuration-input.util.ts @@ -3,6 +3,7 @@ import { isNotEmptyObject, type ValidationError } from 'class-validator'; import { AggregateChartConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/aggregate-chart-configuration.dto'; import { BarChartConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/bar-chart-configuration.dto'; import { FieldConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/field-configuration.dto'; +import { FieldsConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/fields-configuration.dto'; import { FrontComponentConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/front-component-configuration.dto'; import { GaugeChartConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/gauge-chart-configuration.dto'; import { IframeConfigurationDTO } from 'src/engine/metadata-modules/page-layout-widget/dtos/iframe-configuration.dto'; @@ -140,10 +141,11 @@ export const validateWidgetConfigurationInput = ({ ); break; case WidgetConfigurationType.FIELDS: - throw new PageLayoutWidgetException( - 'Fields configuration is not supported yet', - PageLayoutWidgetExceptionCode.INVALID_PAGE_LAYOUT_WIDGET_DATA, + errors = validateWidgetConfigurationByDto( + FieldsConfigurationDTO, + configuration, ); + break; case WidgetConfigurationType.TIMELINE: throw new PageLayoutWidgetException( 'Timeline configuration is not supported yet',