From 5f27348421f705767ce905b843d131e04f55f2a0 Mon Sep 17 00:00:00 2001 From: Jarrod Flesch Date: Wed, 5 Feb 2025 08:40:38 -0500 Subject: [PATCH] fix: incorrect tenant selection with postgres --- .../src/components/TenantSelector/index.tsx | 2 +- .../TenantSelectionProvider/index.tsx | 18 ++++++++++-------- .../src/utilities/getTenantFromCookie.ts | 7 ++++++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/packages/plugin-multi-tenant/src/components/TenantSelector/index.tsx b/packages/plugin-multi-tenant/src/components/TenantSelector/index.tsx index 757ec714a37..91e9a116cb3 100644 --- a/packages/plugin-multi-tenant/src/components/TenantSelector/index.tsx +++ b/packages/plugin-multi-tenant/src/components/TenantSelector/index.tsx @@ -42,7 +42,7 @@ export const TenantSelector = ({ viewType }: { viewType?: ViewTypes }) => { selectedTenantID ? selectedTenantID === SELECT_ALL ? undefined - : String(selectedTenantID) + : (selectedTenantID as string) : undefined } /> diff --git a/packages/plugin-multi-tenant/src/providers/TenantSelectionProvider/index.tsx b/packages/plugin-multi-tenant/src/providers/TenantSelectionProvider/index.tsx index 14b3d951715..ff4227f1426 100644 --- a/packages/plugin-multi-tenant/src/providers/TenantSelectionProvider/index.tsx +++ b/packages/plugin-multi-tenant/src/providers/TenantSelectionProvider/index.tsx @@ -33,7 +33,7 @@ export const TenantSelectionProvider = async ({ }) tenantOptions = docs.map((doc) => ({ label: String(doc[useAsTitle]), - value: String(doc.id), + value: doc.id, })) } catch (_) { // user likely does not have access @@ -42,15 +42,17 @@ export const TenantSelectionProvider = async ({ const cookies = await getCookies() let tenantCookie = cookies.get('payload-tenant')?.value let initialValue = undefined - const isValidTenantCookie = - (tenantOptions.length > 1 && tenantCookie === SELECT_ALL) || - tenantOptions.some((option) => option.value === tenantCookie) - if (isValidTenantCookie) { - initialValue = tenantCookie + if (tenantOptions.length > 1 && tenantCookie === SELECT_ALL) { + initialValue = SELECT_ALL } else { - tenantCookie = undefined - initialValue = tenantOptions.length > 1 ? SELECT_ALL : tenantOptions[0]?.value + const matchingOption = tenantOptions.find((option) => String(option.value) === tenantCookie) + if (matchingOption) { + initialValue = matchingOption.value + } else { + tenantCookie = undefined + initialValue = tenantOptions.length > 1 ? SELECT_ALL : tenantOptions[0]?.value + } } return ( diff --git a/packages/plugin-multi-tenant/src/utilities/getTenantFromCookie.ts b/packages/plugin-multi-tenant/src/utilities/getTenantFromCookie.ts index bd4a7bfc3c5..6cf2afa6493 100644 --- a/packages/plugin-multi-tenant/src/utilities/getTenantFromCookie.ts +++ b/packages/plugin-multi-tenant/src/utilities/getTenantFromCookie.ts @@ -1,4 +1,5 @@ import { parseCookies } from 'payload' +import { isNumber } from 'payload/shared' /** * A function that takes request headers and an idType and returns the current tenant ID from the cookie @@ -13,5 +14,9 @@ export function getTenantFromCookie( ): null | number | string { const cookies = parseCookies(headers) const selectedTenant = cookies.get('payload-tenant') || null - return selectedTenant ? (idType === 'number' ? parseFloat(selectedTenant) : selectedTenant) : null + return selectedTenant + ? idType === 'number' && isNumber(selectedTenant) + ? parseFloat(selectedTenant) + : selectedTenant + : null }