diff --git a/src/components/config/VisualConfigEditor.tsx b/src/components/config/VisualConfigEditor.tsx index 76a95bd..e397205 100644 --- a/src/components/config/VisualConfigEditor.tsx +++ b/src/components/config/VisualConfigEditor.tsx @@ -1,4 +1,4 @@ -import { useId, useMemo, useState, type ReactNode } from 'react'; +import { memo, useCallback, useId, useMemo, useState, type ReactNode } from 'react'; import { useTranslation } from 'react-i18next'; import { Button } from '@/components/ui/Button'; import { Input } from '@/components/ui/Input'; @@ -94,7 +94,7 @@ function Divider() { return
; } -function ApiKeysCardEditor({ +const ApiKeysCardEditor = memo(function ApiKeysCardEditor({ value, disabled, onChange, @@ -306,9 +306,9 @@ function ApiKeysCardEditor({ ); -} +}); -function StringListEditor({ +const StringListEditor = memo(function StringListEditor({ value, disabled, placeholder, @@ -363,9 +363,9 @@ function StringListEditor({ ); -} +}); -function PayloadRulesEditor({ +const PayloadRulesEditor = memo(function PayloadRulesEditor({ value, disabled, protocolFirst = false, @@ -686,9 +686,9 @@ function PayloadRulesEditor({ ); -} +}); -function PayloadFilterRulesEditor({ +const PayloadFilterRulesEditor = memo(function PayloadFilterRulesEditor({ value, disabled, onChange, @@ -834,7 +834,7 @@ function PayloadFilterRulesEditor({ ); -} +}); export function VisualConfigEditor({ values, validationErrors, disabled = false, onChange }: VisualConfigEditorProps) { const { t } = useTranslation(); @@ -860,6 +860,20 @@ export function VisualConfigEditor({ values, validationErrors, disabled = false, validationErrors?.['streaming.nonstreamKeepaliveInterval'] ); + const handleApiKeysTextChange = useCallback((apiKeysText: string) => onChange({ apiKeysText }), [onChange]); + const handlePayloadDefaultRulesChange = useCallback( + (payloadDefaultRules: PayloadRule[]) => onChange({ payloadDefaultRules }), + [onChange] + ); + const handlePayloadOverrideRulesChange = useCallback( + (payloadOverrideRules: PayloadRule[]) => onChange({ payloadOverrideRules }), + [onChange] + ); + const handlePayloadFilterRulesChange = useCallback( + (payloadFilterRules: PayloadFilterRule[]) => onChange({ payloadFilterRules }), + [onChange] + ); + return (