mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
fix(site/src/pages/AgentsPage): use raw API for provider delete cascade
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import type { FC } from "react";
|
||||
import { useMutation, useQuery, useQueryClient } from "react-query";
|
||||
import { API } from "#/api/api";
|
||||
import {
|
||||
chatModelConfigs,
|
||||
chatModels,
|
||||
@@ -84,6 +85,9 @@ const AgentSettingsModelsPage: FC = () => {
|
||||
onUpdateModel={(modelConfigId, req) =>
|
||||
updateModelMutation.mutateAsync({ modelConfigId, req })
|
||||
}
|
||||
onCascadeUpdateModel={(modelConfigId, req) =>
|
||||
API.experimental.updateChatModelConfig(modelConfigId, req)
|
||||
}
|
||||
onDeleteModel={(id) => deleteModelMutation.mutateAsync(id)}
|
||||
isCreatingModel={createModelMutation.isPending}
|
||||
isUpdatingModel={updateModelMutation.isPending}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import type { FC } from "react";
|
||||
import { useMutation, useQuery, useQueryClient } from "react-query";
|
||||
import { API } from "#/api/api";
|
||||
import {
|
||||
chatModelConfigs,
|
||||
chatModels,
|
||||
@@ -84,6 +85,9 @@ const AgentSettingsProvidersPage: FC = () => {
|
||||
onUpdateModel={(modelConfigId, req) =>
|
||||
updateModelMutation.mutateAsync({ modelConfigId, req })
|
||||
}
|
||||
onCascadeUpdateModel={(modelConfigId, req) =>
|
||||
API.experimental.updateChatModelConfig(modelConfigId, req)
|
||||
}
|
||||
onDeleteModel={(id) => deleteModelMutation.mutateAsync(id)}
|
||||
isCreatingModel={createModelMutation.isPending}
|
||||
isUpdatingModel={updateModelMutation.isPending}
|
||||
|
||||
+12
-10
@@ -246,6 +246,7 @@ const meta: Meta<typeof ChatModelAdminPanel> = {
|
||||
providerMutationError: null,
|
||||
onCreateModel: fn(async () => ({})),
|
||||
onUpdateModel: fn(async () => ({})),
|
||||
onCascadeUpdateModel: fn(async () => ({})),
|
||||
onDeleteModel: fn(async () => undefined),
|
||||
isCreatingModel: false,
|
||||
isUpdatingModel: false,
|
||||
@@ -2380,7 +2381,7 @@ export const ProviderDeleteWaitingForModels: Story = {
|
||||
await body.findByRole("button", { name: "Delete provider" }),
|
||||
).toBeDisabled();
|
||||
expect(args.onDeleteProvider).not.toHaveBeenCalled();
|
||||
expect(args.onUpdateModel).not.toHaveBeenCalled();
|
||||
expect(args.onCascadeUpdateModel).not.toHaveBeenCalled();
|
||||
},
|
||||
};
|
||||
|
||||
@@ -2476,19 +2477,19 @@ export const ProviderDeleteConfirmed: Story = {
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(args.onUpdateModel).toHaveBeenCalledTimes(3);
|
||||
expect(args.onCascadeUpdateModel).toHaveBeenCalledTimes(3);
|
||||
});
|
||||
expect(args.onUpdateModel).toHaveBeenNthCalledWith(
|
||||
expect(args.onCascadeUpdateModel).toHaveBeenNthCalledWith(
|
||||
1,
|
||||
"model-anthropic-fallback",
|
||||
{ is_default: true },
|
||||
);
|
||||
expect(args.onUpdateModel).toHaveBeenNthCalledWith(
|
||||
expect(args.onCascadeUpdateModel).toHaveBeenNthCalledWith(
|
||||
2,
|
||||
"model-openai-default",
|
||||
{ enabled: false },
|
||||
);
|
||||
expect(args.onUpdateModel).toHaveBeenNthCalledWith(
|
||||
expect(args.onCascadeUpdateModel).toHaveBeenNthCalledWith(
|
||||
3,
|
||||
"model-openai-secondary",
|
||||
{ enabled: false },
|
||||
@@ -2503,7 +2504,7 @@ export const ProviderDeleteConfirmed: Story = {
|
||||
export const ProviderDeleteCascadeFailure: Story = {
|
||||
args: {
|
||||
...providerDeleteCascadeArgs,
|
||||
onUpdateModel: fn(async (id: string) => {
|
||||
onCascadeUpdateModel: fn(async (id: string) => {
|
||||
if (id === "model-openai-default") {
|
||||
throw new Error("Failed to disable model.");
|
||||
}
|
||||
@@ -2520,13 +2521,14 @@ export const ProviderDeleteCascadeFailure: Story = {
|
||||
);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(args.onUpdateModel).toHaveBeenCalledWith(
|
||||
expect(args.onCascadeUpdateModel).toHaveBeenCalledWith(
|
||||
"model-anthropic-fallback",
|
||||
{ is_default: true },
|
||||
);
|
||||
expect(args.onUpdateModel).toHaveBeenCalledWith("model-openai-default", {
|
||||
enabled: false,
|
||||
});
|
||||
expect(args.onCascadeUpdateModel).toHaveBeenCalledWith(
|
||||
"model-openai-default",
|
||||
{ enabled: false },
|
||||
);
|
||||
});
|
||||
expect(args.onDeleteProvider).not.toHaveBeenCalled();
|
||||
await expect(await body.findByRole("dialog")).toBeInTheDocument();
|
||||
|
||||
@@ -259,6 +259,10 @@ interface ChatModelAdminPanelProps {
|
||||
modelConfigId: string,
|
||||
req: TypesGen.UpdateChatModelConfigRequest,
|
||||
) => Promise<unknown>;
|
||||
onCascadeUpdateModel: (
|
||||
modelConfigId: string,
|
||||
req: TypesGen.UpdateChatModelConfigRequest,
|
||||
) => Promise<unknown>;
|
||||
onDeleteModel: (modelConfigId: string) => Promise<void>;
|
||||
isCreatingModel: boolean;
|
||||
isUpdatingModel: boolean;
|
||||
@@ -285,6 +289,7 @@ export const ChatModelAdminPanel: FC<ChatModelAdminPanelProps> = ({
|
||||
providerMutationError,
|
||||
onCreateModel,
|
||||
onUpdateModel,
|
||||
onCascadeUpdateModel,
|
||||
onDeleteModel,
|
||||
isCreatingModel,
|
||||
isUpdatingModel,
|
||||
@@ -327,7 +332,7 @@ export const ChatModelAdminPanel: FC<ChatModelAdminPanelProps> = ({
|
||||
onCreateProvider={onCreateProvider}
|
||||
onUpdateProvider={onUpdateProvider}
|
||||
onDeleteProvider={onDeleteProvider}
|
||||
onUpdateModel={onUpdateModel}
|
||||
onCascadeUpdateModel={onCascadeUpdateModel}
|
||||
allModelConfigs={modelConfigs}
|
||||
/>
|
||||
) : (
|
||||
|
||||
@@ -51,7 +51,7 @@ interface ProviderFormProps {
|
||||
req: TypesGen.UpdateChatProviderConfigRequest,
|
||||
) => Promise<unknown>;
|
||||
onDeleteProvider: (providerConfigId: string) => Promise<void>;
|
||||
onUpdateModel: (
|
||||
onCascadeUpdateModel: (
|
||||
modelConfigId: string,
|
||||
req: TypesGen.UpdateChatModelConfigRequest,
|
||||
) => Promise<unknown>;
|
||||
@@ -67,7 +67,7 @@ export const ProviderForm: FC<ProviderFormProps> = ({
|
||||
onCreateProvider,
|
||||
onUpdateProvider,
|
||||
onDeleteProvider,
|
||||
onUpdateModel,
|
||||
onCascadeUpdateModel,
|
||||
allModelConfigs,
|
||||
onBack,
|
||||
}) => {
|
||||
@@ -423,7 +423,7 @@ export const ProviderForm: FC<ProviderFormProps> = ({
|
||||
await cascadeDisableProviderModels({
|
||||
associatedModels: providerState.modelConfigs,
|
||||
allModels: allModelConfigs,
|
||||
updateModelConfig: onUpdateModel,
|
||||
updateModelConfig: onCascadeUpdateModel,
|
||||
});
|
||||
} catch (error) {
|
||||
toast.error(
|
||||
|
||||
@@ -82,7 +82,7 @@ interface ProvidersSectionProps {
|
||||
req: UpdateChatProviderConfigRequest,
|
||||
) => Promise<unknown>;
|
||||
onDeleteProvider: (providerConfigId: string) => Promise<void>;
|
||||
onUpdateModel: (
|
||||
onCascadeUpdateModel: (
|
||||
modelConfigId: string,
|
||||
req: UpdateChatModelConfigRequest,
|
||||
) => Promise<unknown>;
|
||||
@@ -99,7 +99,7 @@ export const ProvidersSection: FC<ProvidersSectionProps> = ({
|
||||
onCreateProvider,
|
||||
onUpdateProvider,
|
||||
onDeleteProvider,
|
||||
onUpdateModel,
|
||||
onCascadeUpdateModel,
|
||||
allModelConfigs,
|
||||
}) => {
|
||||
const [searchParams, setSearchParams] = useSearchParams();
|
||||
@@ -210,7 +210,7 @@ export const ProvidersSection: FC<ProvidersSectionProps> = ({
|
||||
}
|
||||
}}
|
||||
onBack={clearProviderView}
|
||||
onUpdateModel={onUpdateModel}
|
||||
onCascadeUpdateModel={onCascadeUpdateModel}
|
||||
allModelConfigs={allModelConfigs}
|
||||
/>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user