feat(secret-approval): conflict ui, request count and secret path in request detail

This commit is contained in:
Akhil Mohan
2023-10-05 20:45:16 +05:30
parent 80a3ea42ac
commit cb893f71ee
14 changed files with 227 additions and 42 deletions
@@ -3,4 +3,8 @@ export {
useUpdateSecretApprovalRequestStatus,
useUpdateSecretApprovalReviewStatus
} from "./mutation";
export { useGetSecretApprovalRequestDetails, useGetSecretApprovalRequests } from "./queries";
export {
useGetSecretApprovalRequestCount,
useGetSecretApprovalRequestDetails,
useGetSecretApprovalRequests
} from "./queries";
@@ -35,8 +35,9 @@ export const useUpdateSecretApprovalRequestStatus = () => {
});
return data;
},
onSuccess: (_, { id }) => {
onSuccess: (_, { id, workspaceId }) => {
queryClient.invalidateQueries(secretApprovalRequestKeys.detail({ id }));
queryClient.invalidateQueries(secretApprovalRequestKeys.count({ workspaceId }));
}
});
};
@@ -52,6 +53,7 @@ export const usePerformSecretApprovalRequestMerge = () => {
onSuccess: (_, { id, workspaceId }) => {
queryClient.invalidateQueries(secretApprovalRequestKeys.detail({ id }));
queryClient.invalidateQueries(secretApprovalRequestKeys.list({ workspaceId }));
queryClient.invalidateQueries(secretApprovalRequestKeys.count({ workspaceId }));
}
});
};
@@ -15,9 +15,11 @@ import { UserWsKeyPair } from "../keys/types";
import { decryptSecrets } from "../secrets/queries";
import { DecryptedSecret } from "../secrets/types";
import {
TGetSecretApprovalRequestCount,
TGetSecretApprovalRequestDetails,
TGetSecretApprovalRequestList,
TSecretApprovalRequest,
TSecretApprovalRequestCount,
TSecretApprovalSecChange,
TSecretApprovalSecChangeData
} from "./types";
@@ -36,7 +38,11 @@ export const secretApprovalRequestKeys = {
"secret-approval-requests"
] as const,
detail: ({ id }: Omit<TGetSecretApprovalRequestDetails, "decryptKey">) =>
[{ id }, "secret-approval-request-detail"] as const
[{ id }, "secret-approval-request-detail"] as const,
count: ({ workspaceId }: TGetSecretApprovalRequestCount) => [
{ workspaceId },
"secret-approval-request-count"
]
};
export const decryptSecretApprovalSecret = (
@@ -187,3 +193,32 @@ export const useGetSecretApprovalRequestDetails = ({
}),
enabled: Boolean(id && decryptKey) && (options?.enabled ?? true)
});
const fetchSecretApprovalRequestCount = async ({ workspaceId }: TGetSecretApprovalRequestCount) => {
const { data } = await apiRequest.get<{ approvals: TSecretApprovalRequestCount }>(
"/api/v1/secret-approval-requests/count",
{ params: { workspaceId } }
);
return data.approvals;
};
export const useGetSecretApprovalRequestCount = ({
workspaceId,
options = {}
}: TGetSecretApprovalRequestCount & {
options?: Omit<
UseQueryOptions<
TSecretApprovalRequestCount,
unknown,
TSecretApprovalRequestCount,
ReturnType<typeof secretApprovalRequestKeys.count>
>,
"queryKey" | "queryFn"
>;
}) =>
useQuery({
queryKey: secretApprovalRequestKeys.count({ workspaceId }),
queryFn: () => fetchSecretApprovalRequestCount({ workspaceId }),
enabled: Boolean(workspaceId) && (options?.enabled ?? true)
});
@@ -17,7 +17,6 @@ export enum CommitType {
export type TSecretApprovalSecChangeData = {
_id: string;
version: number;
secretKeyCiphertext: string;
secretKeyIV: string;
secretKeyTag: string;
@@ -31,6 +30,7 @@ export type TSecretApprovalSecChangeData = {
algorithm: "aes-256-gcm";
keyEncoding: "utf8" | "base64";
tags?: WsTag[];
version: number;
};
export type TSecretApprovalSecChange = {
@@ -57,10 +57,12 @@ export type TSecretApprovalRequest<
workspace: string;
environment: string;
folderId: string;
secretPath: string;
hasMerged: boolean;
status: "open" | "close";
policy: TSecretApprovalPolicy;
statusChangeBy: string;
conflicts: Array<{ secretId: string; op: CommitType.UPDATE }>;
commits: {
// if there is no secret means it was creation
secret?: { version: number };
@@ -71,6 +73,11 @@ export type TSecretApprovalRequest<
}[];
};
export type TSecretApprovalRequestCount = {
open: number;
closed: number;
};
export type TGetSecretApprovalRequestList = {
workspaceId: string;
environment?: string;
@@ -80,6 +87,10 @@ export type TGetSecretApprovalRequestList = {
offset?: number;
};
export type TGetSecretApprovalRequestCount = {
workspaceId: string;
};
export type TGetSecretApprovalRequestDetails = {
id: string;
decryptKey: UserWsKeyPair;
@@ -93,6 +104,7 @@ export type TUpdateSecretApprovalReviewStatusDTO = {
export type TUpdateSecretApprovalRequestStatusDTO = {
status: "open" | "close";
id: string;
workspaceId: string;
};
export type TPerformSecretApprovalRequestMerge = {
@@ -8,6 +8,7 @@ import {
} from "@app/components/utilities/cryptography/crypto";
import { apiRequest } from "@app/config/request";
import { secretApprovalRequestKeys } from "../secretApprovalRequest/queries";
import { secretSnapshotKeys } from "../secretSnapshots/queries";
import { secretKeys } from "./queries";
import {
@@ -114,6 +115,7 @@ export const useCreateSecretV3 = ({
queryClient.invalidateQueries(
secretSnapshotKeys.count({ environment, workspaceId, directory: secretPath })
);
queryClient.invalidateQueries(secretApprovalRequestKeys.count({ workspaceId }));
},
...options
});
@@ -173,6 +175,7 @@ export const useUpdateSecretV3 = ({
queryClient.invalidateQueries(
secretSnapshotKeys.count({ environment, workspaceId, directory: secretPath })
);
queryClient.invalidateQueries(secretApprovalRequestKeys.count({ workspaceId }));
},
...options
});
@@ -209,6 +212,7 @@ export const useDeleteSecretV3 = ({
queryClient.invalidateQueries(
secretSnapshotKeys.count({ environment, workspaceId, directory: secretPath })
);
queryClient.invalidateQueries(secretApprovalRequestKeys.count({ workspaceId }));
},
...options
});
@@ -261,6 +265,7 @@ export const useCreateSecretBatch = ({
queryClient.invalidateQueries(
secretSnapshotKeys.count({ environment, workspaceId, directory: secretPath })
);
queryClient.invalidateQueries(secretApprovalRequestKeys.count({ workspaceId }));
},
...options
});
@@ -313,6 +318,7 @@ export const useUpdateSecretBatch = ({
queryClient.invalidateQueries(
secretSnapshotKeys.count({ environment, workspaceId, directory: secretPath })
);
queryClient.invalidateQueries(secretApprovalRequestKeys.count({ workspaceId }));
},
...options
});
@@ -349,6 +355,7 @@ export const useDeleteSecretBatch = ({
queryClient.invalidateQueries(
secretSnapshotKeys.count({ environment, workspaceId, directory: secretPath })
);
queryClient.invalidateQueries(secretApprovalRequestKeys.count({ workspaceId }));
},
...options
});