fix(client): circular function calls leads to memory leak (#1049)

* fix(client): circular function call leads to memory leak

* allow children validation
This commit is contained in:
Murat Dzhulkuttiev 2026-02-03 20:50:50 +03:00 • committed by GitHub
commit 885c8bc732
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 11 additions and 3 deletions

View file

@ -28,6 +28,7 @@ interface DynamicJsonFormProps {
export interface DynamicJsonFormRef {
validateJson: () => { isValid: boolean; error: string | null };
hasJsonError: () => boolean;
}
const isTypeSupported = (
@ -129,6 +130,10 @@ const DynamicJsonForm = forwardRef<DynamicJsonFormRef, DynamicJsonFormProps>(
// on every keystroke which would be inefficient and error-prone
const timeoutRef = useRef<ReturnType<typeof setTimeout>>();
const hasJsonError = () => {
return !!jsonError;
};
// Debounce JSON parsing and parent updates to handle typing gracefully
const debouncedUpdateParent = useCallback(
(jsonString: string) => {
@ -253,6 +258,7 @@ const DynamicJsonForm = forwardRef<DynamicJsonFormRef, DynamicJsonFormProps>(
useImperativeHandle(ref, () => ({
validateJson,
hasJsonError,
}));
const renderFormFields = (

View file

@ -102,9 +102,11 @@ const ToolsTab = ({
const { copied, setCopied } = useCopy();
// Function to check if any form has validation errors
const checkValidationErrors = () => {
const checkValidationErrors = (validateChildren: boolean = false) => {
const errors = Object.values(formRefs.current).some(
(ref) => ref && !ref.validateJson().isValid,
(ref) =>
ref &&
(validateChildren ? !ref.validateJson().isValid : ref.hasJsonError()),
);
setHasValidationErrors(errors);
return errors;
@ -675,7 +677,7 @@ const ToolsTab = ({
<Button
onClick={async () => {
// Validate JSON inputs before calling tool
if (checkValidationErrors()) return;
if (checkValidationErrors(true)) return;
try {
setIsToolRunning(true);