Missing null check on action.settings.outputSchema crashes HTTP Request workflow editor
https://sonarly.com/issue/13598?type=bug `useHttpRequestOutputSchema` hook calls `Object.keys(action.settings.outputSchema)` without guarding against `undefined`, crashing when a workflow's HTTP Request step has no `outputSchema` in its persisted settings JSON. Fix: Added an `isDefined(action.settings.outputSchema)` guard before calling `Object.keys(action.settings.outputSchema)` in `useHttpRequestOutputSchema.ts`. When a workflow's HTTP Request step has stored settings JSON that is missing the `outputSchema` field (e.g., from direct DB manipulation or a code path that didn't include it), the hook now gracefully initializes the `outputSchema` state to `null` instead of crashing with `TypeError: undefined is not an object`. This matches the team's established pattern of using `isDefined()` from `twenty-shared/utils` for null guards, as seen in `filterOutputSchema.ts` and `useAvailableVariablesInWorkflowStep.ts`. The fix is minimal and safe: when `outputSchema` is missing, the user sees an empty output schema field they can populate — the same experience as a newly created HTTP Request step.
This commit is contained in:
+3
-1
@@ -3,6 +3,7 @@ import { type BaseOutputSchemaV2 } from 'twenty-shared/workflow';
|
||||
import { parseAndValidateVariableFriendlyStringifiedJson } from '@/workflow/utils/parseAndValidateVariableFriendlyStringifiedJson';
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
import { useState } from 'react';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { convertOutputSchemaToJson } from '@/workflow/workflow-steps/workflow-actions/http-request-action/utils/convertOutputSchemaToJson';
|
||||
import { getHttpRequestOutputSchema } from '@/workflow/workflow-steps/workflow-actions/http-request-action/utils/getHttpRequestOutputSchema';
|
||||
|
||||
@@ -18,7 +19,8 @@ export const useHttpRequestOutputSchema = ({
|
||||
readonly,
|
||||
}: UseHttpRequestOutputSchemaProps) => {
|
||||
const [outputSchema, setOutputSchema] = useState<string | null>(
|
||||
Object.keys(action.settings.outputSchema).length
|
||||
isDefined(action.settings.outputSchema) &&
|
||||
Object.keys(action.settings.outputSchema).length
|
||||
? JSON.stringify(
|
||||
convertOutputSchemaToJson(
|
||||
action.settings.outputSchema as BaseOutputSchemaV2,
|
||||
|
||||
Reference in New Issue
Block a user