fix endpoint and improve frontend performance

This commit is contained in:
x032205
2025-10-20 21:03:35 -04:00
parent 2b6fcb2564
commit bf1bdf93ec
3 changed files with 18 additions and 7 deletions

View File

@@ -4,6 +4,7 @@ import { apiRequest } from "@app/config/request";
import { TPamResourceOption } from "./types/resource-options"; import { TPamResourceOption } from "./types/resource-options";
import { TPamAccount, TPamFolder, TPamResource, TPamSession } from "./types"; import { TPamAccount, TPamFolder, TPamResource, TPamSession } from "./types";
import { PamResourceType } from "./enums";
export const pamKeys = { export const pamKeys = {
all: ["pam"] as const, all: ["pam"] as const,
@@ -70,22 +71,23 @@ export const useListPamResources = (
}; };
export const useGetPamResourceById = ( export const useGetPamResourceById = (
resourceType?: PamResourceType,
resourceId?: string, resourceId?: string,
options?: Omit< options?: Omit<
UseQueryOptions<TPamResource, unknown, TPamResource, ReturnType<typeof pamKeys.getResource>>, UseQueryOptions<TPamResource, unknown, TPamResource, ReturnType<typeof pamKeys.getResource>>,
"queryKey" | "queryFn" | "enabled" "queryKey" | "queryFn"
> >
) => { ) => {
return useQuery({ return useQuery({
queryKey: pamKeys.getResource(resourceId || ""), queryKey: pamKeys.getResource(resourceId || ""),
queryFn: async () => { queryFn: async () => {
const { data } = await apiRequest.get<{ resource: TPamResource }>( const { data } = await apiRequest.get<{ resource: TPamResource }>(
`/api/v1/pam/resources/${resourceId}` `/api/v1/pam/resources/${resourceType}/${resourceId}`
); );
return data.resource; return data.resource;
}, },
enabled: !!resourceId, enabled: !!resourceId && !!resourceType && (options?.enabled ?? true),
...options ...options
}); });
}; };

View File

@@ -65,7 +65,13 @@ const CreateForm = ({
switch (resourceType) { switch (resourceType) {
case PamResourceType.Postgres: case PamResourceType.Postgres:
return <PostgresAccountForm onSubmit={onSubmit} resourceId={resourceId} />; return (
<PostgresAccountForm
onSubmit={onSubmit}
resourceId={resourceId}
resourceType={resourceType}
/>
);
default: default:
throw new Error(`Unhandled resource: ${resourceType}`); throw new Error(`Unhandled resource: ${resourceType}`);
} }

View File

@@ -4,7 +4,7 @@ import { zodResolver } from "@hookform/resolvers/zod";
import { z } from "zod"; import { z } from "zod";
import { Button, ModalClose } from "@app/components/v2"; import { Button, ModalClose } from "@app/components/v2";
import { TPostgresAccount, useGetPamResourceById } from "@app/hooks/api/pam"; import { PamResourceType, TPostgresAccount, useGetPamResourceById } from "@app/hooks/api/pam";
import { BaseSqlAccountSchema } from "./shared/sql-account-schemas"; import { BaseSqlAccountSchema } from "./shared/sql-account-schemas";
import { SqlAccountFields } from "./shared/SqlAccountFields"; import { SqlAccountFields } from "./shared/SqlAccountFields";
@@ -14,6 +14,7 @@ import { RotateAccountFields, rotateAccountFieldsSchema } from "./RotateAccountF
type Props = { type Props = {
account?: TPostgresAccount; account?: TPostgresAccount;
resourceId?: string; resourceId?: string;
resourceType?: PamResourceType;
onSubmit: (formData: FormData) => Promise<void>; onSubmit: (formData: FormData) => Promise<void>;
}; };
@@ -23,7 +24,7 @@ const formSchema = genericAccountFieldsSchema.extend(rotateAccountFieldsSchema.s
type FormData = z.infer<typeof formSchema>; type FormData = z.infer<typeof formSchema>;
export const PostgresAccountForm = ({ account, resourceId, onSubmit }: Props) => { export const PostgresAccountForm = ({ account, resourceId, resourceType, onSubmit }: Props) => {
const isUpdate = Boolean(account); const isUpdate = Boolean(account);
const form = useForm<FormData>({ const form = useForm<FormData>({
@@ -46,7 +47,9 @@ export const PostgresAccountForm = ({ account, resourceId, onSubmit }: Props) =>
const [rotationCredentialsConfigured, setRotationCredentialsConfigured] = useState(false); const [rotationCredentialsConfigured, setRotationCredentialsConfigured] = useState(false);
const { data: resource } = useGetPamResourceById(resourceId); const { data: resource } = useGetPamResourceById(resourceType, resourceId, {
enabled: !account && !!resourceId && !!resourceType
});
useEffect(() => { useEffect(() => {
if (account) { if (account) {