diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field.tsx b/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field.tsx
index 412ccd6890..ce53552a21 100644
--- a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field.tsx
+++ b/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/external-id-field.tsx
@@ -9,7 +9,7 @@ import { useState } from "react";
type ExternalIdFieldProps = {
value: string | null;
- onChange: (id: string | null) => void;
+ onChange: (identityId: string | null, externalId: string | null) => void;
error?: string;
disabled?: boolean;
};
@@ -24,7 +24,7 @@ export const ExternalIdField = ({
const { identities, isFetchingNextPage, hasNextPage, loadMore } = useFetchIdentities();
const createIdentity = useCreateIdentity((data) => {
- onChange(data.identityId);
+ onChange(data.identityId, data.externalId);
});
const handleCreateIdentity = () => {
@@ -97,7 +97,7 @@ export const ExternalIdField = ({
return;
}
const identity = identities.find((id) => id.id === val);
- onChange(identity?.id || null);
+ onChange(identity?.id || null, identity?.externalId || null);
}}
placeholder={
diff --git a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/general-setup.tsx b/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/general-setup.tsx
index f69793e265..fc71af78a8 100644
--- a/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/general-setup.tsx
+++ b/apps/dashboard/app/(app)/apis/[apiId]/_components/create-key/components/general-setup.tsx
@@ -8,6 +8,7 @@ export const GeneralSetup = () => {
const {
register,
formState: { errors },
+ setValue,
control,
} = useFormContext();
@@ -34,18 +35,23 @@ export const GeneralSetup = () => {
optional
{...register("prefix")}
/>
+
(
{
+ field.onChange(identityId);
+ setValue("externalId", externalId);
+ }}
error={errors.externalId?.message}
/>
)}
/>
+
{
return [];
}
- const schemaObj = schema as { shape: Record; _def?: { typeName: string } };
+ const schemaObj = schema as {
+ shape: Record;
+ _def?: { typeName: string };
+ };
return Object.keys(schemaObj.shape).flatMap((key) => {
const fullPath = prefix ? `${prefix}.${key}` : key;
diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx
index 855fe4ecad..2c2a13a8e8 100644
--- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx
+++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/actions/components/edit-external-id/index.tsx
@@ -22,6 +22,7 @@ export const EditExternalId = ({
const [selectedIdentityId, setSelectedIdentityId] = useState(
keyDetails.identity_id || null,
);
+ const [selectedExternalId, setSelectedExternalId] = useState(null);
const [isConfirmPopoverOpen, setIsConfirmPopoverOpen] = useState(false);
const clearButtonRef = useRef(null);
@@ -36,6 +37,7 @@ export const EditExternalId = ({
ownerType: "v2",
identity: {
id: selectedIdentityId,
+ externalId: selectedExternalId,
},
});
};
@@ -114,7 +116,10 @@ export const EditExternalId = ({
{
+ setSelectedIdentityId(identityId);
+ setSelectedExternalId(externalId);
+ }}
disabled={updateKeyOwner.isLoading || Boolean(originalIdentityId)}
/>
diff --git a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx
index 98f833db14..59d648b81a 100644
--- a/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx
+++ b/apps/dashboard/app/(app)/apis/[apiId]/keys/[keyAuthId]/_components/components/table/components/selection-controls/components/batch-edit-external-id.tsx
@@ -19,6 +19,7 @@ export const BatchEditExternalId = ({
onClose,
}: BatchEditExternalIdProps): JSX.Element => {
const [selectedIdentityId, setSelectedIdentityId] = useState(null);
+ const [selectedExternalId, setSelectedExternalId] = useState(null);
const [isConfirmPopoverOpen, setIsConfirmPopoverOpen] = useState(false);
const clearButtonRef = useRef(null);
@@ -32,6 +33,7 @@ export const BatchEditExternalId = ({
ownerType: "v2",
identity: {
id: selectedIdentityId,
+ externalId: selectedExternalId,
},
});
};
@@ -57,6 +59,7 @@ export const BatchEditExternalId = ({
ownerType: "v2",
identity: {
id: null,
+ externalId: null,
},
});
};
@@ -141,7 +144,10 @@ export const BatchEditExternalId = ({
{
+ setSelectedIdentityId(identityId);
+ setSelectedExternalId(externalId);
+ }}
disabled={updateKeyOwner.isLoading}
/>
diff --git a/apps/dashboard/lib/trpc/routers/key/create.ts b/apps/dashboard/lib/trpc/routers/key/create.ts
index fb29108cf9..9b8812bdba 100644
--- a/apps/dashboard/lib/trpc/routers/key/create.ts
+++ b/apps/dashboard/lib/trpc/routers/key/create.ts
@@ -47,7 +47,8 @@ export const createKey = t.procedure
name: input.name,
hash,
start,
- identityId: input.externalId,
+ identityId: input.identityId,
+ ownerId: input.externalId,
meta: JSON.stringify(input.meta ?? {}),
workspaceId: ctx.workspace.id,
forWorkspaceId: null,
diff --git a/apps/dashboard/lib/trpc/routers/key/updateOwnerId.ts b/apps/dashboard/lib/trpc/routers/key/updateOwnerId.ts
index cd7177a9c6..4b73be308f 100644
--- a/apps/dashboard/lib/trpc/routers/key/updateOwnerId.ts
+++ b/apps/dashboard/lib/trpc/routers/key/updateOwnerId.ts
@@ -18,6 +18,7 @@ const ownerValidationV1 = z.object({
const ownerValidationV2 = z.object({
identity: z.object({
id: z.string().nullish(),
+ externalId: z.string().nullish(),
}),
ownerType: z.literal("v2"),
});
@@ -194,8 +195,7 @@ const updateOwnerV2 = async (
.update(schema.keys)
.set({
identityId: input.identity.id ?? null,
- // Set ownerId to null to maintain consistency
- ownerId: null,
+ ownerId: input.identity.externalId,
})
.where(
and(