diff --git a/frontends/nextjs/src/app/api/v1/[...slug]/route.ts b/frontends/nextjs/src/app/api/v1/[...slug]/route.ts index 7e7a0c208..47f3b62e7 100644 --- a/frontends/nextjs/src/app/api/v1/[...slug]/route.ts +++ b/frontends/nextjs/src/app/api/v1/[...slug]/route.ts @@ -67,11 +67,11 @@ async function handleRequest( const tenantResult = await validateTenantAccess( user, route.tenant, - packageResult.package?.minLevel || 1 + packageResult.package?.minLevel ?? 1 ) - if (!tenantResult.allowed) { - const status = !user ? STATUS.UNAUTHORIZED : STATUS.FORBIDDEN - return errorResponse(tenantResult.reason || 'Access denied', status) + if (tenantResult.allowed === false) { + const status = user === null ? STATUS.UNAUTHORIZED : STATUS.FORBIDDEN + return errorResponse(tenantResult.reason ?? 'Access denied', status) } // 5. Execute the DBAL operation diff --git a/frontends/nextjs/src/app/providers/use-theme.ts b/frontends/nextjs/src/app/providers/use-theme.ts index 3ad5e0b2e..d091cc966 100644 --- a/frontends/nextjs/src/app/providers/use-theme.ts +++ b/frontends/nextjs/src/app/providers/use-theme.ts @@ -4,7 +4,7 @@ import { ThemeContext } from './theme-context' export function useTheme() { const context = useContext(ThemeContext) - if (!context) { + if (context === null || context === undefined) { throw new Error('useTheme must be used within Providers') } return context diff --git a/frontends/nextjs/src/app/ui/[[...slug]]/page.tsx b/frontends/nextjs/src/app/ui/[[...slug]]/page.tsx index 55aec75e0..c2d14844f 100644 --- a/frontends/nextjs/src/app/ui/[[...slug]]/page.tsx +++ b/frontends/nextjs/src/app/ui/[[...slug]]/page.tsx @@ -24,7 +24,7 @@ interface PageProps { */ export default async function DynamicUIPage({ params }: PageProps) { const resolvedParams = await params - const slug = resolvedParams.slug || [] + const slug = resolvedParams.slug ?? [] const path = '/' + slug.join('/') // Prefer Lua package-based UI pages, fallback to database-backed pages @@ -51,7 +51,7 @@ export default async function DynamicUIPage({ params }: PageProps) { */ export async function generateMetadata({ params }: PageProps): Promise { const resolvedParams = await params - const slug = resolvedParams.slug || [] + const slug = resolvedParams.slug ?? [] const path = '/' + slug.join('/') const pageData = (await loadPageFromLuaPackages(path)) ?? (await loadPageFromDb(path)) diff --git a/frontends/nextjs/src/components/get-component-icon.tsx b/frontends/nextjs/src/components/get-component-icon.tsx index 203288835..bf9954d7c 100644 --- a/frontends/nextjs/src/components/get-component-icon.tsx +++ b/frontends/nextjs/src/components/get-component-icon.tsx @@ -51,5 +51,5 @@ const iconMap: Record> = { export function getComponentIcon(iconName: string, props?: IconProps): ReactElement | null { const Icon = iconMap[iconName] - return Icon ? : null + return Icon !== null && Icon !== undefined ? : null } diff --git a/frontends/nextjs/src/components/ui-page-renderer/UIPageRenderer.tsx b/frontends/nextjs/src/components/ui-page-renderer/UIPageRenderer.tsx index bc7e376a6..989062ea7 100644 --- a/frontends/nextjs/src/components/ui-page-renderer/UIPageRenderer.tsx +++ b/frontends/nextjs/src/components/ui-page-renderer/UIPageRenderer.tsx @@ -23,7 +23,7 @@ export function UIPageRenderer({ pageData }: UIPageRendererProps) { // Provide action handlers via context return ( - + {elements} ) diff --git a/frontends/nextjs/src/lib/db/auth/queries/authenticate-user.ts b/frontends/nextjs/src/lib/db/auth/queries/authenticate-user.ts index b42399258..fb516a7a3 100644 --- a/frontends/nextjs/src/lib/db/auth/queries/authenticate-user.ts +++ b/frontends/nextjs/src/lib/db/auth/queries/authenticate-user.ts @@ -42,7 +42,7 @@ export const authenticateUser = async ( where: { username }, }) - if (!userRecord) { + if (userRecord === null || userRecord === undefined) { return { success: false, user: null, error: 'user_not_found' } } diff --git a/frontends/nextjs/src/lib/db/auth/queries/get-user-by-email.ts b/frontends/nextjs/src/lib/db/auth/queries/get-user-by-email.ts index 2fee7b5e4..d9158600b 100644 --- a/frontends/nextjs/src/lib/db/auth/queries/get-user-by-email.ts +++ b/frontends/nextjs/src/lib/db/auth/queries/get-user-by-email.ts @@ -15,11 +15,11 @@ export const getUserByEmail = async ( const record = await adapter.findFirst('User', { where: { email, - ...(options?.tenantId ? { tenantId: options.tenantId } : {}), + ...(options?.tenantId !== null && options?.tenantId !== undefined ? { tenantId: options.tenantId } : {}), }, }) - if (!record) { + if (record === null || record === undefined) { return null } diff --git a/frontends/nextjs/src/lib/db/auth/queries/get-user-by-username.ts b/frontends/nextjs/src/lib/db/auth/queries/get-user-by-username.ts index 251da9f4a..fe65cdec6 100644 --- a/frontends/nextjs/src/lib/db/auth/queries/get-user-by-username.ts +++ b/frontends/nextjs/src/lib/db/auth/queries/get-user-by-username.ts @@ -15,11 +15,11 @@ export const getUserByUsername = async ( const record = await adapter.findFirst('User', { where: { username, - ...(options?.tenantId ? { tenantId: options.tenantId } : {}), + ...(options?.tenantId !== null && options?.tenantId !== undefined ? { tenantId: options.tenantId } : {}), }, }) - if (!record) { + if (record === null || record === undefined) { return null } diff --git a/frontends/nextjs/src/lib/db/comments/crud/add-comment.ts b/frontends/nextjs/src/lib/db/comments/crud/add-comment.ts index edb102022..2aef7156f 100644 --- a/frontends/nextjs/src/lib/db/comments/crud/add-comment.ts +++ b/frontends/nextjs/src/lib/db/comments/crud/add-comment.ts @@ -11,7 +11,7 @@ export async function addComment(comment: Comment): Promise { userId: comment.userId, content: comment.content, createdAt: BigInt(comment.createdAt), - updatedAt: comment.updatedAt ? BigInt(comment.updatedAt) : null, - parentId: comment.parentId, + updatedAt: comment.updatedAt !== null && comment.updatedAt !== undefined ? BigInt(comment.updatedAt) : null, + parentId: comment.parentId ?? null, }) } diff --git a/frontends/nextjs/src/lib/db/comments/crud/get-comments.ts b/frontends/nextjs/src/lib/db/comments/crud/get-comments.ts index 31cb3b7ba..f52970be4 100644 --- a/frontends/nextjs/src/lib/db/comments/crud/get-comments.ts +++ b/frontends/nextjs/src/lib/db/comments/crud/get-comments.ts @@ -25,7 +25,7 @@ export async function getComments(): Promise { entityId: c.entityId, content: c.content, createdAt: Number(c.createdAt), - updatedAt: c.updatedAt ? Number(c.updatedAt) : undefined, - parentId: c.parentId || undefined, + updatedAt: (c.updatedAt !== null && c.updatedAt !== undefined) ? Number(c.updatedAt) : undefined, + parentId: (c.parentId !== null && c.parentId !== undefined) ? c.parentId : undefined, })) } diff --git a/frontends/nextjs/src/lib/db/comments/crud/set-comments.ts b/frontends/nextjs/src/lib/db/comments/crud/set-comments.ts index 96b80fe18..d2a5052fd 100644 --- a/frontends/nextjs/src/lib/db/comments/crud/set-comments.ts +++ b/frontends/nextjs/src/lib/db/comments/crud/set-comments.ts @@ -24,8 +24,8 @@ export async function setComments(comments: Comment[]): Promise { userId: comment.userId, content: comment.content, createdAt: BigInt(comment.createdAt), - updatedAt: comment.updatedAt ? BigInt(comment.updatedAt) : null, - parentId: comment.parentId, + updatedAt: comment.updatedAt !== null && comment.updatedAt !== undefined ? BigInt(comment.updatedAt) : null, + parentId: comment.parentId ?? null, }) } } diff --git a/frontends/nextjs/src/lib/db/components/config/crud/operations/add-component-config.ts b/frontends/nextjs/src/lib/db/components/config/crud/operations/add-component-config.ts index c9b472133..6169d2db1 100644 --- a/frontends/nextjs/src/lib/db/components/config/crud/operations/add-component-config.ts +++ b/frontends/nextjs/src/lib/db/components/config/crud/operations/add-component-config.ts @@ -9,7 +9,7 @@ export async function addComponentConfig(config: ComponentConfig): Promise props: JSON.stringify(config.props), styles: JSON.stringify(config.styles), events: JSON.stringify(config.events), - conditionalRendering: config.conditionalRendering + conditionalRendering: config.conditionalRendering !== null && config.conditionalRendering !== undefined ? JSON.stringify(config.conditionalRendering) : null, }) diff --git a/frontends/nextjs/src/lib/db/components/config/crud/operations/update-component-config.ts b/frontends/nextjs/src/lib/db/components/config/crud/operations/update-component-config.ts index b51c1b548..3b00937f9 100644 --- a/frontends/nextjs/src/lib/db/components/config/crud/operations/update-component-config.ts +++ b/frontends/nextjs/src/lib/db/components/config/crud/operations/update-component-config.ts @@ -12,7 +12,7 @@ export async function updateComponentConfig( if (updates.styles !== undefined) data.styles = JSON.stringify(updates.styles) if (updates.events !== undefined) data.events = JSON.stringify(updates.events) if (updates.conditionalRendering !== undefined) { - data.conditionalRendering = updates.conditionalRendering + data.conditionalRendering = updates.conditionalRendering !== null && updates.conditionalRendering !== undefined ? JSON.stringify(updates.conditionalRendering) : null } diff --git a/frontends/nextjs/src/lib/db/components/config/set-component-configs.ts b/frontends/nextjs/src/lib/db/components/config/set-component-configs.ts index 256ba4c43..e7ae93767 100644 --- a/frontends/nextjs/src/lib/db/components/config/set-component-configs.ts +++ b/frontends/nextjs/src/lib/db/components/config/set-component-configs.ts @@ -22,7 +22,7 @@ export async function setComponentConfigs(configs: Record