Compare commits

...
Author SHA1 Message Date
Sonarly Claude Code 35495e779d 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
2026-05-05 21:41:38 +00:00
@@ -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',