From a1ba3f439f70121fc187e8fff2dbd19f3f2cfecd Mon Sep 17 00:00:00 2001 From: Zeke Zhang <958414905@qq.com> Date: Thu, 30 Jul 2026 11:31:24 +0800 Subject: [PATCH] fix(plugin-multi-portal): handle empty type (#10212) --- .../layoutRegistration.strict.test.ts | 20 ++++++++++++++++--- .../src/client-v2/layoutRegistration.ts | 4 ++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/__tests__/layoutRegistration.strict.test.ts b/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/__tests__/layoutRegistration.strict.test.ts index d8548a48e67..2bb9736c1d6 100644 --- a/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/__tests__/layoutRegistration.strict.test.ts +++ b/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/__tests__/layoutRegistration.strict.test.ts @@ -89,12 +89,26 @@ describe('Multi Portal runtime registration failures', () => { expect(layoutManager.registerLayout).not.toHaveBeenCalled(); }); - it('registers only no-code portals and skips every other portal type', () => { + it('treats empty portal types as no-code portals', () => { + const layoutManager = createLayoutManager(); + const emptyTypePortals = [ + { ...portal, uid: 'missing-type-portal', portalName: 'missingType', portalType: undefined }, + { ...portal, uid: 'null-type-portal', portalName: 'nullType', portalType: null }, + { ...portal, uid: 'empty-type-portal', portalName: 'emptyType', portalType: '' }, + ]; + + expect(registerMultiPortalRecords(layoutManager, emptyTypePortals)).toEqual([ + 'missing-type-portal', + 'null-type-portal', + 'empty-type-portal', + ]); + expect(layoutManager.registerLayout).toHaveBeenCalledTimes(3); + }); + + it('skips ai and unknown non-empty portal types', () => { const layoutManager = createLayoutManager(); const skippedPortals = [ { ...portal, uid: 'ai-portal', portalName: 'ai', portalType: 'ai' }, - { ...portal, uid: 'missing-type-portal', portalName: 'missingType', portalType: undefined }, - { ...portal, uid: 'empty-type-portal', portalName: 'emptyType', portalType: '' }, { ...portal, uid: 'unknown-type-portal', portalName: 'unknownType', portalType: 'custom' }, ]; diff --git a/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/layoutRegistration.ts b/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/layoutRegistration.ts index d1d5acb63f9..99fa10d0d29 100644 --- a/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/layoutRegistration.ts +++ b/packages/plugins/@nocobase/plugin-multi-portal/src/client-v2/layoutRegistration.ts @@ -16,7 +16,7 @@ export { getMultiPortalRouteScopeCacheKey }; export type MultiPortalRuntimeRecord = { uid: string; title?: string; - portalType?: string; + portalType?: string | null; portalName: string; routePath: string; authCheck: boolean; @@ -74,7 +74,7 @@ const layoutModeMobileRegisterOptions = { } satisfies Pick; function isRuntimePortal(record: MultiPortalRuntimeRecord) { - return record.portalType === 'no-code'; + return (record.portalType || 'no-code') === 'no-code'; } export function toMultiPortalLayoutRegisterOptions(record: MultiPortalRuntimeRecord): LayoutRegisterOptions | null {