fix custom provider edit gating and form reset on re-render

Gate Edit/incomplete-auth on config-layer sources so catalog providers
are not treated as editable custom overrides. Snapshot form initial
values when Edit is clicked and ignore same-id initialValues identity
changes so parent re-renders cannot wipe in-progress edits.

Co-authored-by: Serhii Dziupin <makeittech@users.noreply.github.com>
This commit is contained in:
Cursor Agent
2026-08-02 12:42:23 +00:00
co-authored by Serhii Dziupin
parent d40bb9e5a0
commit b7c09ee137
4 changed files with 77 additions and 16 deletions
@@ -2,6 +2,7 @@ import { describe, expect, test } from 'bun:test';
import {
buildAuthSetRequest,
buildProviderUpsertRequest,
isConfigDefinedCustomProvider,
isCustomOpenAICompatibleProvider,
providerToCustomFormState,
validateCustomProvider,
@@ -288,4 +289,24 @@ describe('provider edit helpers', () => {
expect(state.models[0]).toEqual({ row: state.models[0].row, id: 'fast', name: 'Fast' });
expect(state.headers[0]).toEqual({ row: state.headers[0].row, key: 'X-Campus', value: '1' });
});
test('requires a config-layer source before treating a provider as editable custom', () => {
const catalogLike = {
id: 'openai',
options: { baseURL: 'https://api.openai.com/v1' },
models: [{ id: 'gpt-4o', name: 'GPT-4o', api: { npm: '@ai-sdk/openai-compatible' } }],
};
expect(isCustomOpenAICompatibleProvider(catalogLike)).toBe(true);
expect(isConfigDefinedCustomProvider(catalogLike, undefined)).toBe(false);
expect(isConfigDefinedCustomProvider(catalogLike, {
user: { exists: false },
project: { exists: false },
custom: { exists: false },
})).toBe(false);
expect(isConfigDefinedCustomProvider(catalogLike, {
user: { exists: true },
project: { exists: false },
})).toBe(true);
});
});