diff --git a/app/react/common/stacks/queries/useStackFile.ts b/app/react/common/stacks/queries/useStackFile.ts index cb927cc6a..1c1be4cfe 100644 --- a/app/react/common/stacks/queries/useStackFile.ts +++ b/app/react/common/stacks/queries/useStackFile.ts @@ -12,23 +12,36 @@ export function useStackFile( { version, commitHash }: { version?: number; commitHash?: string } = {}, { enabled = true }: { enabled?: boolean } = {} ) { - return useQuery( - queryKeys.stackFile(stackId, { version, commitHash }), - () => getStackFile(stackId!, { version, commitHash }), - { - ...withGlobalError('Unable to retrieve stack'), - enabled: !!stackId && enabled, - } - ); + return useQuery({ + queryKey: queryKeys.stackFile(stackId, { version, commitHash }), + queryFn: ({ signal }) => + getStackFile({ + stackId: stackId!, + version, + commitHash, + options: { signal }, + }), + + ...withGlobalError('Unable to retrieve stack'), + enabled: !!stackId && enabled, + }); } -export async function getStackFile( - stackId: StackId, - { version, commitHash }: { version?: number; commitHash?: string } = {} -) { +export async function getStackFile({ + stackId, + version, + commitHash, + options = {}, +}: { + stackId: StackId; + version?: number; + commitHash?: string; + options?: { signal?: AbortSignal }; +}) { try { const { data } = await axios.get(`/stacks/${stackId}/file`, { params: { version, commitHash }, + signal: options.signal, }); return data; } catch (e) { diff --git a/app/react/common/stacks/types.ts b/app/react/common/stacks/types.ts index 072cd7f31..24889dcbe 100644 --- a/app/react/common/stacks/types.ts +++ b/app/react/common/stacks/types.ts @@ -62,8 +62,8 @@ export interface Stack { CreatedBy: string; UpdateDate: number; UpdatedBy: string; - AdditionalFiles?: string[]; - AutoUpdate?: AutoUpdateResponse; + AdditionalFiles?: string[] | null; + AutoUpdate?: AutoUpdateResponse | null; Option?: { Prune: boolean; Force: boolean; diff --git a/app/react/docker/containers/queries/useContainers.ts b/app/react/docker/containers/queries/useContainers.ts index b4be5987a..8d7adcfe2 100644 --- a/app/react/docker/containers/queries/useContainers.ts +++ b/app/react/docker/containers/queries/useContainers.ts @@ -58,6 +58,10 @@ export async function getContainers( { all = true, filters, nodeName }: UseContainers = {} ) { try { + if (!environmentId) { + return []; + } + const { data } = await axios.get( buildDockerProxyUrl(environmentId, 'containers', 'json'), { diff --git a/app/react/docker/stacks/ItemView/StackInfoTab/StackRedeployGitForm/InnerForm.tsx b/app/react/docker/stacks/ItemView/StackInfoTab/StackRedeployGitForm/InnerForm.tsx index 8d27213f2..5d6f1e8ed 100644 --- a/app/react/docker/stacks/ItemView/StackInfoTab/StackRedeployGitForm/InnerForm.tsx +++ b/app/react/docker/stacks/ItemView/StackInfoTab/StackRedeployGitForm/InnerForm.tsx @@ -48,7 +48,7 @@ export function InnerForm({ url={gitConfig.URL} type="stack" configFilePath={gitConfig.ConfigFilePath} - additionalFiles={stack.AdditionalFiles} + additionalFiles={stack.AdditionalFiles || []} /> { + async ({ signal }) => { if (!id) { return undefined; } @@ -21,7 +21,10 @@ export function useAppStackFile(id?: number, kind?: string) { } // Fetch regular stack file - const stackFile = await getStackFile(id); + const stackFile = await getStackFile({ + stackId: id, + options: { signal }, + }); return stackFile?.StackFileContent; }, { diff --git a/app/react/portainer/gitops/AutoUpdateFieldset/utils.ts b/app/react/portainer/gitops/AutoUpdateFieldset/utils.ts index 27b2b2c6a..f531f7677 100644 --- a/app/react/portainer/gitops/AutoUpdateFieldset/utils.ts +++ b/app/react/portainer/gitops/AutoUpdateFieldset/utils.ts @@ -1,7 +1,7 @@ import { AutoUpdateResponse, AutoUpdateModel } from '../types'; export function parseAutoUpdateResponse( - response?: AutoUpdateResponse + response?: AutoUpdateResponse | null ): AutoUpdateModel { if (!response || (!response?.Interval && !response?.Webhook)) { return { diff --git a/app/react/portainer/gitops/queries/useUpdateGitStack.ts b/app/react/portainer/gitops/queries/useUpdateGitStack.ts index 38026385d..242a29884 100644 --- a/app/react/portainer/gitops/queries/useUpdateGitStack.ts +++ b/app/react/portainer/gitops/queries/useUpdateGitStack.ts @@ -30,7 +30,10 @@ export function useUpdateGitStack(stackId: number, endpointId: number) { mutationFn: (payload: GitStackPayload) => updateGitStack(stackId, endpointId, payload), onSuccess: () => { - queryClient.invalidateQueries({ queryKey: queryKeys.base() }); + queryClient.invalidateQueries({ + queryKey: queryKeys.stack(stackId), + exact: true, + }); }, }); } diff --git a/app/react/portainer/gitops/queries/useUpdateGitStackSettings.ts b/app/react/portainer/gitops/queries/useUpdateGitStackSettings.ts index 361cd6bee..709cfec2d 100644 --- a/app/react/portainer/gitops/queries/useUpdateGitStackSettings.ts +++ b/app/react/portainer/gitops/queries/useUpdateGitStackSettings.ts @@ -33,8 +33,11 @@ export function useUpdateGitStackSettings() { endpointId: number; payload: GitStackPayload; }) => updateGitStackSettings(stackId, endpointId, payload), - onSuccess: () => { - queryClient.invalidateQueries({ queryKey: queryKeys.base() }); + onSuccess: (_, { stackId }) => { + queryClient.invalidateQueries({ + queryKey: queryKeys.stack(stackId), + exact: true, + }); }, }); }