mirror of
https://github.com/Dokploy/dokploy.git
synced 2026-09-13 18:46:20 +05:00
fix(environment): scope saved state to application
This commit is contained in:
parent
f1d2670b77
commit
5fdaf644b1
@ -2,6 +2,7 @@ import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
isSavedApplicationEnvironment,
|
||||
mergeSavedApplicationEnvironment,
|
||||
shouldIgnoreApplicationEnvironment,
|
||||
} from "../../components/dashboard/application/environment/cache";
|
||||
|
||||
describe("mergeSavedApplicationEnvironment", () => {
|
||||
@ -62,3 +63,28 @@ describe("isSavedApplicationEnvironment", () => {
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("shouldIgnoreApplicationEnvironment", () => {
|
||||
it("does not carry saved state from application A into application B", () => {
|
||||
const savedForApplicationA = {
|
||||
applicationId: "application-a",
|
||||
env: "A_VALUE=1",
|
||||
buildArgs: "",
|
||||
buildSecrets: "",
|
||||
createEnvFile: true,
|
||||
};
|
||||
|
||||
expect(
|
||||
shouldIgnoreApplicationEnvironment(
|
||||
"application-b",
|
||||
{
|
||||
env: "B_VALUE=1",
|
||||
buildArgs: "",
|
||||
buildSecrets: "",
|
||||
createEnvFile: true,
|
||||
},
|
||||
savedForApplicationA,
|
||||
),
|
||||
).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
@ -5,6 +5,10 @@ export type SavedApplicationEnvironment = {
|
||||
createEnvFile: boolean;
|
||||
};
|
||||
|
||||
export type SavedApplicationEnvironmentState = SavedApplicationEnvironment & {
|
||||
applicationId: string;
|
||||
};
|
||||
|
||||
export const mergeSavedApplicationEnvironment = <T extends object>(
|
||||
application: T | undefined,
|
||||
environment: SavedApplicationEnvironment,
|
||||
@ -29,3 +33,13 @@ export const isSavedApplicationEnvironment = (
|
||||
application.buildArgs === environment.buildArgs &&
|
||||
application.buildSecrets === environment.buildSecrets &&
|
||||
application.createEnvFile === environment.createEnvFile;
|
||||
|
||||
export const shouldIgnoreApplicationEnvironment = (
|
||||
applicationId: string,
|
||||
application: Partial<
|
||||
Record<keyof SavedApplicationEnvironment, string | boolean | null>
|
||||
>,
|
||||
savedEnvironment: SavedApplicationEnvironmentState | undefined,
|
||||
) =>
|
||||
savedEnvironment?.applicationId === applicationId &&
|
||||
!isSavedApplicationEnvironment(application, savedEnvironment);
|
||||
|
||||
@ -20,7 +20,8 @@ import { api } from "@/utils/api";
|
||||
import {
|
||||
isSavedApplicationEnvironment,
|
||||
mergeSavedApplicationEnvironment,
|
||||
type SavedApplicationEnvironment,
|
||||
shouldIgnoreApplicationEnvironment,
|
||||
type SavedApplicationEnvironmentState,
|
||||
} from "./cache";
|
||||
|
||||
const addEnvironmentSchema = z.object({
|
||||
@ -40,7 +41,7 @@ export const ShowEnvironment = ({ applicationId }: Props) => {
|
||||
const { data: permissions } = api.user.getPermissions.useQuery();
|
||||
const canWrite = permissions?.envVars.write ?? false;
|
||||
const utils = api.useUtils();
|
||||
const savedEnvironment = useRef<SavedApplicationEnvironment>();
|
||||
const savedEnvironment = useRef<SavedApplicationEnvironmentState>();
|
||||
const { mutateAsync, isPending } =
|
||||
api.application.saveEnvironment.useMutation();
|
||||
|
||||
@ -93,8 +94,11 @@ export const ShowEnvironment = ({ applicationId }: Props) => {
|
||||
};
|
||||
|
||||
if (
|
||||
savedEnvironment.current &&
|
||||
!isSavedApplicationEnvironment(data, savedEnvironment.current)
|
||||
shouldIgnoreApplicationEnvironment(
|
||||
applicationId,
|
||||
data,
|
||||
savedEnvironment.current,
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
@ -122,7 +126,7 @@ export const ShowEnvironment = ({ applicationId }: Props) => {
|
||||
...nextEnvironment,
|
||||
applicationId,
|
||||
});
|
||||
savedEnvironment.current = nextEnvironment;
|
||||
savedEnvironment.current = { ...nextEnvironment, applicationId };
|
||||
utils.application.one.setData({ applicationId }, (application) =>
|
||||
mergeSavedApplicationEnvironment(application, nextEnvironment),
|
||||
);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user