Skip to content

Commit

Permalink
Merge pull request #116 from premieroctet/chore/upgrade-next-admin-3.5.0
Browse files Browse the repository at this point in the history
chore: upgrade to next admin 5.0
  • Loading branch information
quentingrchr authored Aug 9, 2024
2 parents 7b43c28 + e886f38 commit ec413d2
Show file tree
Hide file tree
Showing 12 changed files with 640 additions and 1,023 deletions.
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"@heroicons/react": "^2.0.16",
"@next-auth/prisma-adapter": "^1.0.5",
"@postlight/parser": "^2.2.3",
"@premieroctet/next-admin": "^3.4.0",
"@premieroctet/next-admin": "^5.0.0",
"@prisma/client": "^4.11.0",
"@radix-ui/react-dialog": "^1.0.3",
"@radix-ui/react-navigation-menu": "^1.1.2",
Expand Down Expand Up @@ -73,7 +73,7 @@
"openai": "^4.10.0",
"plaiceholder": "^2.5.0",
"prisma": "^4.11.0",
"prisma-json-schema-generator": "^3.1.3",
"prisma-json-schema-generator": "^5.1.1",
"react": "^18.2.0",
"react-beautiful-dnd": "^13.1.1",
"react-colorful": "^5.6.1",
Expand Down
19 changes: 0 additions & 19 deletions src/actions/nextadmin.ts

This file was deleted.

66 changes: 31 additions & 35 deletions src/app/(admin)/admin/[[...nextadmin]]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { deleteItem, submitFormAction } from '@/actions/nextadmin';
import schema from '@/../prisma/json-schema/json-schema.json';
import Dashboard, { DashboardProps } from '@/components/admin/Dashboard';
import {
linksByDay,
Expand All @@ -8,64 +8,60 @@ import {
} from '@/lib/adminQueries';
import client from '@/lib/db';
import { authOptions } from '@/pages/api/auth/[...nextauth]';
import '@/theme/admin.css';
import { options } from '@/utils/nextadmin';
import { NextAdmin } from '@premieroctet/next-admin';
import { getPropsFromParams } from '@premieroctet/next-admin/dist/appRouter';
import '@premieroctet/next-admin/dist/styles.css';
import { NextAdmin, PageProps } from '@premieroctet/next-admin';
import { getNextAdminProps } from '@premieroctet/next-admin/dist/appRouter';
import { getServerSession } from 'next-auth';
import { redirect } from 'next/navigation';
import schema from '../../../../../prisma/json-schema/json-schema.json';


export default async function AdminPage({
params,
searchParams,
}: {
params: { [key: string]: string[] };
searchParams: { [key: string]: string | string[] | undefined } | undefined;
}) {
export default async function AdminPage({ params, searchParams }: PageProps) {
const session = await getServerSession(authOptions);
const isAdmin = session?.user?.role === 'SUPERADMIN';

if (!isAdmin) {
redirect('/');
}

const props = await getPropsFromParams({
params: params.nextadmin,
const props = await getNextAdminProps({
basePath: '/admin',
apiBasePath: '/api/admin',
params: params.nextadmin as string[],
searchParams,
options: options,
options,
prisma: client,
schema,
action: submitFormAction,
deleteAction: deleteItem
});

const dashboardProps: DashboardProps | undefined = !params.nextadmin
? {
newUsersByMonth: await newUsersByMonth(),
newDigestByMonth: await newDigestByMonth(),
linksByDomain: await linksByDomain(),
linksByDay: await linksByDay(),
linksCount: await client.link.count(),
latestDigest: await client.digest.findFirst({
where: { publishedAt: { not: null } },
orderBy: { createdAt: 'desc' },
include: {
team: true,
},
}),
latestTeam: await client.team.findFirst({
orderBy: { createdAt: 'desc' },
}),
}
newUsersByMonth: await newUsersByMonth(),
newDigestByMonth: await newDigestByMonth(),
linksByDomain: await linksByDomain(),
linksByDay: await linksByDay(),
linksCount: await client.link.count(),
latestDigest: await client.digest.findFirst({
where: { publishedAt: { not: null } },
orderBy: { createdAt: 'desc' },
include: {
team: true,
},
}),
latestTeam: await client.team.findFirst({
orderBy: { createdAt: 'desc' },
}),
}
: undefined;

return (
<NextAdmin
{...props}
dashboard={dashboardProps && <Dashboard {...dashboardProps} />}
user={{
data: {
name: session!.user!.email!,
},
logout: '/logout',
}}
/>
);
}
25 changes: 25 additions & 0 deletions src/app/(admin)/api/admin/[[...nextadmin]]/route.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import schema from '@/../prisma/json-schema/json-schema.json';
import client from '@/lib/db';
import { authOptions } from '@/pages/api/auth/[...nextauth]';
import { options } from '@/utils/nextadmin';
import { createHandler } from '@premieroctet/next-admin/dist/appHandler';
import { getServerSession } from 'next-auth';
import { NextRequest, NextResponse } from 'next/server';

const { run } = createHandler({
apiBasePath: '/api/admin',
prisma: client,
schema,
options,
onRequest: async (req: NextRequest) => {
const session = await getServerSession(authOptions);
const isAdmin = session?.user?.role === 'SUPERADMIN';

if (!isAdmin) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
}
}
});


export { run as DELETE, run as GET, run as POST };
3 changes: 2 additions & 1 deletion src/app/(admin)/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { getEnvHost } from '@/lib/server';
import { Metadata } from 'next';
import '@/theme/admin.css';

export const dynamic = 'force-dynamic';

Expand Down Expand Up @@ -44,7 +45,7 @@ export const metadata: Metadata = {
export default async function RootLayout({ children }: Props) {
return (
<html lang="en">
<body className="flex flex-col font-sans overflow-x-hidden bg-white">
<body className="flex flex-col overflow-x-hidden bg-nextadmin-background-default dark:bg-dark-nextadmin-background-default">
{children}
</body>
</html>
Expand Down
12 changes: 12 additions & 0 deletions src/app/(app)/logout/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use client';

import { signOut } from 'next-auth/react';
import { useEffect } from 'react';

export default function Logout() {
useEffect(() => {
signOut({ callbackUrl: '/' });
}, []);

return null;
}
26 changes: 15 additions & 11 deletions src/components/admin/Dashboard.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import { linksByDay, linksByDomain, newDigestByMonth, newUsersByMonth } from "@/lib/adminQueries";
import { Digest, Team } from "@prisma/client";
import { Card, Col, Grid, Metric, Text } from "@tremor/react";
import DataOverTime from "./widgets/DataOverTime";
import LinksByWebsite from "./widgets/LinksByWebsite";
import LinksOverTime from "./widgets/LinksOverTime";

import {
linksByDay,
linksByDomain,
newDigestByMonth,
newUsersByMonth,
} from '@/lib/adminQueries';
import { Digest, Team } from '@prisma/client';
import { Card, Col, Grid, Metric, Text } from '@tremor/react';
import DataOverTime from './widgets/DataOverTime';
import LinksByWebsite from './widgets/LinksByWebsite';
import LinksOverTime from './widgets/LinksOverTime';

export type DashboardProps = {
newUsersByMonth: Awaited<ReturnType<typeof newUsersByMonth>>;
Expand All @@ -18,7 +22,7 @@ export type DashboardProps = {

const Dashboard = (dashboardProps: DashboardProps) => {
return (
<Grid numItems={1} numItemsSm={2} numItemsLg={3} className="gap-2">
<Grid numItems={1} numItemsSm={2} numItemsLg={3} className="gap-2 p-4">
<Col numColSpan={1} numColSpanLg={2}>
<DataOverTime
data={{
Expand Down Expand Up @@ -59,7 +63,7 @@ const Dashboard = (dashboardProps: DashboardProps) => {
<LinksOverTime data={{ linksByDay: dashboardProps.linksByDay }} />
</Col>
</Grid>
)
}
);
};

export default Dashboard
export default Dashboard;
2 changes: 1 addition & 1 deletion src/theme/admin.css
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@config "./../../tailwind.admin.config.js";
@config "../../tailwind.admin.config.js";

@tailwind base;
@tailwind components;
Expand Down
Loading

0 comments on commit ec413d2

Please sign in to comment.