From 4ee3ba8e285d53539cd82b1857313ffd1e387986 Mon Sep 17 00:00:00 2001 From: Drol Date: Wed, 26 Aug 2026 14:22:24 +0800 Subject: [PATCH] fix(plugin-ai-gigachat): defer model settings form creation (#10418) --- .../__tests__/model-settings.test.tsx | 37 +++++++++++++++++++ .../llm-providers/gigachat/ModelSettings.tsx | 7 +++- 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 packages/plugins/@nocobase/plugin-ai-gigachat/src/client-v2/__tests__/model-settings.test.tsx diff --git a/packages/plugins/@nocobase/plugin-ai-gigachat/src/client-v2/__tests__/model-settings.test.tsx b/packages/plugins/@nocobase/plugin-ai-gigachat/src/client-v2/__tests__/model-settings.test.tsx new file mode 100644 index 00000000000..e77b23cd889 --- /dev/null +++ b/packages/plugins/@nocobase/plugin-ai-gigachat/src/client-v2/__tests__/model-settings.test.tsx @@ -0,0 +1,37 @@ +/** + * This file is part of the NocoBase (R) project. + * Copyright (c) 2020-2024 NocoBase Co., Ltd. + * Authors: NocoBase Team. + * + * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. + * For more information, please refer to: https://www.nocobase.com/agreement. + */ + +import React from 'react'; +import { render, screen } from '@testing-library/react'; +import { describe, expect, it, vi } from 'vitest'; + +const mocks = vi.hoisted(() => ({ + createModelSettingsForm: vi.fn(() => () =>
GigaChat model settings
), +})); + +vi.mock('@nocobase/plugin-ai/client-v2', () => ({ + createModelSettingsForm: mocks.createModelSettingsForm, +})); + +import { ModelSettingsForm } from '../llm-providers/gigachat/ModelSettings'; + +describe('GigaChat ModelSettingsForm', () => { + it('creates the settings form lazily when the component renders', () => { + expect(mocks.createModelSettingsForm).not.toHaveBeenCalled(); + + const { rerender } = render(); + + expect(screen.getByText('GigaChat model settings')).toBeInTheDocument(); + expect(mocks.createModelSettingsForm).toHaveBeenCalledTimes(1); + + rerender(); + + expect(mocks.createModelSettingsForm).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/plugins/@nocobase/plugin-ai-gigachat/src/client-v2/llm-providers/gigachat/ModelSettings.tsx b/packages/plugins/@nocobase/plugin-ai-gigachat/src/client-v2/llm-providers/gigachat/ModelSettings.tsx index 4b95d74be67..cc03a632c69 100644 --- a/packages/plugins/@nocobase/plugin-ai-gigachat/src/client-v2/llm-providers/gigachat/ModelSettings.tsx +++ b/packages/plugins/@nocobase/plugin-ai-gigachat/src/client-v2/llm-providers/gigachat/ModelSettings.tsx @@ -7,6 +7,7 @@ * For more information, please refer to: https://www.nocobase.com/agreement. */ +import React, { useMemo } from 'react'; import { createModelSettingsForm, type OptionField } from '@nocobase/plugin-ai/client-v2'; const gigachatCompletionFields: OptionField[] = [ @@ -80,4 +81,8 @@ const gigachatCompletionFields: OptionField[] = [ }, ]; -export const ModelSettingsForm = createModelSettingsForm(gigachatCompletionFields); +export const ModelSettingsForm: React.FC = () => { + const SettingsForm = useMemo(() => createModelSettingsForm(gigachatCompletionFields), []); + + return ; +};