function GeneralSettings()

in libs/designer/src/lib/ui/settings/index.tsx [231:402]


function GeneralSettings({
  nodeId,
  readOnly,
  nodeSettings,
  isExpanded,
  validationErrors,
  dispatch,
  updateSettings,
}: SettingSectionProps): JSX.Element | null {
  const isTrigger = useSelector((state: RootState) => isRootNodeInGraph(nodeId, 'root', state.workflow.nodesMetadata));
  const maximumWaitingRunsMetadata = useHostOptions().maxWaitingRuns;
  const operationInfo = useOperationInfo(nodeId) ?? ({} as any);
  const nodeInputs = useRawInputParameters(nodeId) ?? ({} as any);

  const { timeout, splitOn, splitOnConfiguration, concurrency, conditionExpressions, invokerConnection, count, shouldFailOperation } =
    useSelector((state: RootState) => getRecordEntry(state.operations.settings, nodeId) ?? {});

  const onConcurrencyToggle = (checked: boolean): void => {
    const value = checked ? (concurrency?.value?.runs ?? constants.CONCURRENCY_ACTION_SLIDER_LIMITS.DEFAULT) : undefined;
    updateSettings({
      concurrency: {
        isSupported: !!concurrency?.isSupported,
        value: { runs: value, enabled: checked },
      },
    });
  };

  const onShouldFailOperationToggle = (checked: boolean): void => {
    updateSettings({
      shouldFailOperation: {
        isSupported: !!shouldFailOperation?.isSupported,
        value: checked,
      },
    });
  };

  const onConcurrencyRunValueChange = (value: number): void => {
    updateSettings({
      concurrency: {
        isSupported: !!concurrency?.isSupported,
        value: { enabled: true, runs: value, maximumWaitingRuns: concurrency?.value?.maximumWaitingRuns },
      },
    });
  };

  const onConcurrencyMaxWaitRunChange = (value: number): void => {
    updateSettings({
      concurrency: {
        isSupported: !!concurrency?.isSupported,
        value: { enabled: true, runs: concurrency?.value?.runs, maximumWaitingRuns: value },
      },
    });
  };

  const onSplitOnToggle = (checked: boolean): void => {
    const splitOnSetting = {
      isSupported: !!splitOn?.isSupported,
      value: {
        enabled: checked,
        value: splitOn?.value?.value ?? undefined,
      },
    };

    updateSettings({ splitOn: splitOnSetting });
    updateOutputsAndTokens(nodeId, operationInfo, dispatch, isTrigger, nodeInputs, { ...nodeSettings, splitOn: splitOnSetting });
  };

  const onTimeoutValueChange = (newVal: string): void => {
    updateSettings({
      timeout: {
        isSupported: !!timeout?.isSupported,
        value: newVal,
      },
    });
  };

  const onCountValueChange = (value: number): void => {
    updateSettings({
      count: {
        isSupported: !!count?.isSupported,
        value: value,
      },
    });
  };

  const onTriggerConditionsChange = (newExpressions: string[]): void => {
    updateSettings(
      {
        conditionExpressions: {
          isSupported: !!conditionExpressions?.isSupported,
          value: newExpressions,
        },
      },
      true
    );
  };

  const onClientTrackingIdChange = (newVal: string): void => {
    updateSettings({
      splitOnConfiguration: {
        correlation: { clientTrackingId: newVal },
      },
    });
  };

  const onSplitOnSelectionChanged = (selectedOption: IDropdownOption): void => {
    const splitOnSetting = {
      isSupported: !!splitOn?.isSupported,
      value: {
        enabled: splitOn?.value?.enabled ?? true,
        value: selectedOption.key.toString(),
      },
    };

    updateSettings({ splitOn: splitOnSetting });
    updateOutputsAndTokens(nodeId, operationInfo, dispatch, isTrigger, nodeInputs, { ...nodeSettings, splitOn: splitOnSetting });
  };

  const onInvokerConnectionToggle = (checked: boolean): void => {
    dispatch(
      updateNodeSettings({
        id: nodeId,
        settings: {
          invokerConnection: {
            isSupported: !!invokerConnection?.isSupported,
            value: { value: invokerConnection?.value?.value, enabled: checked },
          },
        },
      })
    );
  };

  if (
    splitOn?.isSupported ||
    timeout?.isSupported ||
    concurrency?.isSupported ||
    conditionExpressions?.isSupported ||
    invokerConnection?.isSupported ||
    count?.isSupported
  ) {
    return (
      <General
        nodeId={nodeId}
        readOnly={readOnly}
        expanded={isExpanded}
        validationErrors={validationErrors}
        splitOn={splitOn}
        count={count}
        timeout={timeout}
        concurrency={concurrency}
        shouldFailOperation={shouldFailOperation}
        invokerConnection={invokerConnection}
        conditionExpressions={conditionExpressions}
        splitOnConfiguration={splitOnConfiguration}
        onHeaderClick={(sectionName) => dispatch(setExpandedSections(sectionName))}
        onConcurrencyToggle={onConcurrencyToggle}
        onShouldFailOperationToggle={onShouldFailOperationToggle}
        onConcurrencyRunValueChange={onConcurrencyRunValueChange}
        onConcurrencyMaxWaitRunChange={onConcurrencyMaxWaitRunChange}
        onInvokerConnectionToggle={onInvokerConnectionToggle}
        onSplitOnToggle={onSplitOnToggle}
        onSplitOnSelectionChanged={onSplitOnSelectionChanged}
        onTimeoutValueChange={onTimeoutValueChange}
        onCountValueChange={onCountValueChange}
        onTriggerConditionsChange={onTriggerConditionsChange}
        onClientTrackingIdChange={onClientTrackingIdChange}
        maximumWaitingRunsMetadata={maximumWaitingRunsMetadata ?? constants.MAXIMUM_WAITING_RUNS.DEFAULT}
      />
    );
  }
  return null;
}