diff --git a/src/actions/get-users.ts b/src/actions/get-users.ts index afd68c7..67d3005 100644 --- a/src/actions/get-users.ts +++ b/src/actions/get-users.ts @@ -2,6 +2,7 @@ import { getDb } from '@/db'; import { user } from '@/db/schema'; +import { isDemoWebsite } from '@/lib/demo'; import { asc, desc, ilike, or, sql } from 'drizzle-orm'; import { createSafeActionClient } from 'next-safe-action'; import { z } from 'zod'; @@ -75,7 +76,8 @@ export const getUsersAction = actionClient ]); // hide user data in demo website - if (process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true') { + const isDemo = isDemoWebsite(); + if (isDemo) { items = items.map((item) => ({ ...item, name: 'Demo User', diff --git a/src/app/[locale]/(protected)/admin/users/layout.tsx b/src/app/[locale]/(protected)/admin/users/layout.tsx index 1bd220c..f3cffb8 100644 --- a/src/app/[locale]/(protected)/admin/users/layout.tsx +++ b/src/app/[locale]/(protected)/admin/users/layout.tsx @@ -1,4 +1,5 @@ import { DashboardHeader } from '@/components/dashboard/dashboard-header'; +import { isDemoWebsite } from '@/lib/demo'; import { getSession } from '@/lib/server'; import { getTranslations } from 'next-intl/server'; import { notFound } from 'next/navigation'; @@ -9,7 +10,7 @@ interface UsersLayoutProps { export default async function UsersLayout({ children }: UsersLayoutProps) { // if is demo website, allow user to access admin and user pages, but data is fake - const isDemo = process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true'; + const isDemo = isDemoWebsite(); // Check if user is admin const session = await getSession(); if (!session || (session.user.role !== 'admin' && !isDemo)) { diff --git a/src/components/admin/user-detail-viewer.tsx b/src/components/admin/user-detail-viewer.tsx index 392ccf9..3936f58 100644 --- a/src/components/admin/user-detail-viewer.tsx +++ b/src/components/admin/user-detail-viewer.tsx @@ -23,6 +23,7 @@ import { Textarea } from '@/components/ui/textarea'; import { useIsMobile } from '@/hooks/use-mobile'; import { authClient } from '@/lib/auth-client'; import type { User } from '@/lib/auth-types'; +import { isDemoWebsite } from '@/lib/demo'; import { formatDate } from '@/lib/formatter'; import { getStripeDashboardCustomerUrl } from '@/lib/urls/urls'; import { cn } from '@/lib/utils'; @@ -53,7 +54,7 @@ export function UserDetailViewer({ user }: UserDetailViewerProps) { const triggerRefresh = useUsersStore((state) => state.triggerRefresh); // show fake data in demo website - const isDemo = process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true'; + const isDemo = isDemoWebsite(); const handleBan = async () => { if (!banReason) { diff --git a/src/components/admin/users-table.tsx b/src/components/admin/users-table.tsx index 7fd0bc3..f9f54f6 100644 --- a/src/components/admin/users-table.tsx +++ b/src/components/admin/users-table.tsx @@ -27,6 +27,7 @@ import { TableRow, } from '@/components/ui/table'; import type { User } from '@/lib/auth-types'; +import { isDemoWebsite } from '@/lib/demo'; import { formatDate } from '@/lib/formatter'; import { getStripeDashboardCustomerUrl } from '@/lib/urls/urls'; import { IconCaretDownFilled, IconCaretUpFilled } from '@tabler/icons-react'; @@ -152,7 +153,7 @@ export function UsersTable({ const [columnVisibility, setColumnVisibility] = useState({}); // show fake data in demo website - const isDemo = process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true'; + const isDemo = isDemoWebsite(); // Map column IDs to translation keys const columnIdToTranslationKey = { diff --git a/src/components/dashboard/dashboard-header.tsx b/src/components/dashboard/dashboard-header.tsx index cb7d855..5a07451 100644 --- a/src/components/dashboard/dashboard-header.tsx +++ b/src/components/dashboard/dashboard-header.tsx @@ -7,6 +7,7 @@ import { } from '@/components/ui/breadcrumb'; import { Separator } from '@/components/ui/separator'; import { SidebarTrigger } from '@/components/ui/sidebar'; +import { isDemoWebsite } from '@/lib/demo'; import React, { type ReactNode } from 'react'; import { CreditsBalanceButton } from '../layout/credits-balance-button'; import LocaleSwitcher from '../layout/locale-switcher'; @@ -30,8 +31,7 @@ export function DashboardHeader({ breadcrumbs, actions, }: DashboardHeaderProps) { - // if is demo website, allow user to access admin and user pages, but data is fake - const isDemo = process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true'; + const isDemo = isDemoWebsite(); return (
diff --git a/src/components/layout/footer.tsx b/src/components/layout/footer.tsx index 12dc1ab..bf93f89 100644 --- a/src/components/layout/footer.tsx +++ b/src/components/layout/footer.tsx @@ -10,7 +10,6 @@ import { LocaleLink } from '@/i18n/navigation'; import { cn } from '@/lib/utils'; import { useTranslations } from 'next-intl'; import type React from 'react'; -import { ThemeSelector } from './theme-selector'; export function Footer({ className }: React.HTMLAttributes) { const t = useTranslations(); @@ -46,7 +45,7 @@ export function Footer({ className }: React.HTMLAttributes) { target="_blank" rel="noreferrer" aria-label={link.title} - className="border border-border inline-flex h-8 w-8 items-center + className="border border-border inline-flex h-8 w-8 items-center justify-center rounded-full hover:bg-accent hover:text-accent-foreground" > {link.title} @@ -99,7 +98,6 @@ export function Footer({ className }: React.HTMLAttributes) {
- {/* */}
diff --git a/src/config/sidebar-config.tsx b/src/config/sidebar-config.tsx index 316aaa6..847a1e8 100644 --- a/src/config/sidebar-config.tsx +++ b/src/config/sidebar-config.tsx @@ -1,5 +1,6 @@ 'use client'; +import { isDemoWebsite } from '@/lib/demo'; import { Routes } from '@/routes'; import type { NestedMenuItem } from '@/types'; import { @@ -30,7 +31,7 @@ export function getSidebarLinks(): NestedMenuItem[] { const t = useTranslations('Dashboard'); // if is demo website, allow user to access admin and user pages, but data is fake - const isDemo = process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true'; + const isDemo = isDemoWebsite(); return [ { diff --git a/src/lib/demo.ts b/src/lib/demo.ts new file mode 100644 index 0000000..b28e6d8 --- /dev/null +++ b/src/lib/demo.ts @@ -0,0 +1,6 @@ +/** + * check if the website is a demo website + */ +export function isDemoWebsite() { + return process.env.NEXT_PUBLIC_DEMO_WEBSITE === 'true'; +}