From 848134aafa66969f0b652f724af0314fb4eaa92f Mon Sep 17 00:00:00 2001 From: ogzhanolguncu Date: Tue, 10 Jun 2025 17:06:34 +0300 Subject: [PATCH 1/3] refactor: add ownerId to create key for backward compat --- apps/dashboard/lib/trpc/routers/key/create.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/dashboard/lib/trpc/routers/key/create.ts b/apps/dashboard/lib/trpc/routers/key/create.ts index fb29108cf9..c9876fe8bc 100644 --- a/apps/dashboard/lib/trpc/routers/key/create.ts +++ b/apps/dashboard/lib/trpc/routers/key/create.ts @@ -48,6 +48,7 @@ export const createKey = t.procedure hash, start, identityId: input.externalId, + ownerId: input.externalId, meta: JSON.stringify(input.meta ?? {}), workspaceId: ctx.workspace.id, forWorkspaceId: null, From becb21018f69cf634f9484858fb7d5d48819272a Mon Sep 17 00:00:00 2001 From: ogzhanolguncu Date: Tue, 10 Jun 2025 17:35:06 +0300 Subject: [PATCH 2/3] fix: value mapping --- .../create-key/components/external-id-field.tsx | 6 +++--- .../create-key/components/general-setup.tsx | 10 ++++++++-- .../_components/create-key/create-key.schema.ts | 10 ++++++++++ .../[apiId]/_components/create-key/create-key.utils.ts | 6 +++++- apps/dashboard/lib/trpc/routers/key/create.ts | 2 +- 5 files changed, 27 insertions(+), 7 deletions(-) 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/lib/trpc/routers/key/create.ts b/apps/dashboard/lib/trpc/routers/key/create.ts index c9876fe8bc..9b8812bdba 100644 --- a/apps/dashboard/lib/trpc/routers/key/create.ts +++ b/apps/dashboard/lib/trpc/routers/key/create.ts @@ -47,7 +47,7 @@ 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, From 15952a84fe4c15130dbd8dea0d01756d03d14a3e Mon Sep 17 00:00:00 2001 From: ogzhanolguncu Date: Tue, 10 Jun 2025 17:49:16 +0300 Subject: [PATCH 3/3] fix: add externalId to update --- .../actions/components/edit-external-id/index.tsx | 7 ++++++- .../components/batch-edit-external-id.tsx | 8 +++++++- apps/dashboard/lib/trpc/routers/key/updateOwnerId.ts | 4 ++-- 3 files changed, 15 insertions(+), 4 deletions(-) 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/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(