Remove admin functionality related code

The admin functionality related code has been removed which includes various user and organization functionalities like delete, update, ban etc. This includes action logic, UI components and supportive utility functions. Notable deletions include the server action files, dialog components for actions like banning and deleting, and related utility functions. This massive cleanup is aimed at simplifying the codebase and the commit reflects adherence to project restructuring.
This commit is contained in:
giancarlo
2024-03-25 15:40:43 +08:00
parent 752259ab17
commit 95793c42b4
135 changed files with 1062 additions and 2872 deletions

View File

@@ -0,0 +1,68 @@
'use client';
import { Suspense } from 'react';
import Link from 'next/link';
import type { Session } from '@supabase/supabase-js';
import { ChevronRightIcon } from 'lucide-react';
import { PersonalAccountDropdown } from '@kit/accounts/personal-account-dropdown';
import { useSignOut } from '@kit/supabase/hooks/use-sign-out';
import { useUserSession } from '@kit/supabase/hooks/use-user-session';
import { Button } from '@kit/ui/button';
import { If } from '@kit/ui/if';
import { Trans } from '@kit/ui/trans';
import pathsConfig from '~/config/paths.config';
export function SiteHeaderAccountSection(
props: React.PropsWithChildren<{
session: Session | null;
}>,
) {
return (
<Suspense fallback={<AuthButtons />}>
<SuspendedPersonalAccountDropdown session={props.session} />
</Suspense>
);
}
function SuspendedPersonalAccountDropdown(props: { session: Session | null }) {
const signOut = useSignOut();
const userSession = useUserSession(props.session);
return (
<If condition={userSession.data} fallback={<AuthButtons />}>
{(session) => (
<PersonalAccountDropdown
paths={{
home: pathsConfig.app.home,
}}
session={session}
signOutRequested={() => signOut.mutateAsync()}
/>
)}
</If>
);
}
function AuthButtons() {
return (
<div className={'hidden space-x-2 lg:flex'}>
<Button variant={'link'}>
<Link href={pathsConfig.auth.signIn}>
<Trans i18nKey={'auth:signIn'} />
</Link>
</Button>
<Link href={pathsConfig.auth.signUp}>
<Button className={'rounded-full'}>
<Trans i18nKey={'auth:signUp'} />
<ChevronRightIcon className={'h-4'} />
</Button>
</Link>
</div>
);
}

View File

@@ -1,8 +1,10 @@
import { SiteHeaderAccountSection } from '~/(marketing)/components/site-header-account-section';
import { SiteNavigation } from '~/(marketing)/components/site-navigation';
import type { Session } from '@supabase/supabase-js';
import { SiteHeaderAccountSection } from '~/(marketing)/_components/site-header-account-section';
import { SiteNavigation } from '~/(marketing)/_components/site-navigation';
import { AppLogo } from '~/components/app-logo';
export function SiteHeader() {
export async function SiteHeader(props: { session: Session | null }) {
return (
<div className={'container mx-auto'}>
<div className="flex h-16 items-center justify-between">
@@ -17,7 +19,7 @@ export function SiteHeader() {
<div className={'flex flex-1 items-center justify-end space-x-4'}>
<div className={'flex items-center'}></div>
<SiteHeaderAccountSection />
<SiteHeaderAccountSection session={props.session} />
<div className={'flex lg:hidden'}>
<SiteNavigation />

View File

@@ -5,11 +5,10 @@ import Script from 'next/script';
import { allPosts } from 'contentlayer/generated';
import Post from '~/(marketing)/blog/_components/post';
import appConfig from '~/config/app.config';
import { withI18n } from '~/lib/i18n/with-i18n';
import Post from '../components/post';
export async function generateMetadata({
params,
}: {

View File

@@ -3,10 +3,10 @@ import type { Post } from 'contentlayer/generated';
import { Heading } from '@kit/ui/heading';
import { If } from '@kit/ui/if';
import { CoverImage } from '~/(marketing)/blog/components/cover-image';
import { DateFormatter } from '~/(marketing)/blog/components/date-formatter';
import { CoverImage } from '~/(marketing)/blog/_components/cover-image';
import { DateFormatter } from '~/(marketing)/blog/_components/date-formatter';
const PostHeader: React.FC<{
export const PostHeader: React.FC<{
post: Post;
}> = ({ post }) => {
const { title, date, readingTime, description, image } = post;
@@ -53,5 +53,3 @@ const PostHeader: React.FC<{
</div>
);
};
export default PostHeader;

View File

@@ -4,8 +4,8 @@ import type { Post } from 'contentlayer/generated';
import { If } from '@kit/ui/if';
import { CoverImage } from '~/(marketing)/blog/components/cover-image';
import { DateFormatter } from '~/(marketing)/blog/components/date-formatter';
import { CoverImage } from '~/(marketing)/blog/_components/cover-image';
import { DateFormatter } from '~/(marketing)/blog/_components/date-formatter';
type Props = {
post: Post;
@@ -15,7 +15,7 @@ type Props = {
const DEFAULT_IMAGE_HEIGHT = 250;
function PostPreview({
export function PostPreview({
post,
preloadImage,
imageHeight,
@@ -67,5 +67,3 @@ function PostPreview({
</div>
);
}
export default PostPreview;

View File

@@ -4,7 +4,7 @@ import type { Post as PostType } from 'contentlayer/generated';
import { Mdx } from '@kit/ui/mdx';
import PostHeader from './post-header';
import { PostHeader } from './post-header';
export const Post: React.FC<{
post: PostType;

View File

@@ -2,19 +2,18 @@ import type { Metadata } from 'next';
import { allPosts } from 'contentlayer/generated';
import PostPreview from '~/(marketing)/blog/components/post-preview';
import { SitePageHeader } from '~/(marketing)/components/site-page-header';
import { GridList } from '~/(marketing)/_components/grid-list';
import { SitePageHeader } from '~/(marketing)/_components/site-page-header';
import { PostPreview } from '~/(marketing)/blog/_components/post-preview';
import appConfig from '~/config/app.config';
import { withI18n } from '~/lib/i18n/with-i18n';
import { GridList } from '../components/grid-list';
export const metadata: Metadata = {
title: `Blog - ${appConfig.name}`,
description: `Tutorials, Guides and Updates from our team`,
};
async function BlogPage() {
function BlogPage() {
const livePosts = allPosts.filter((post) => {
const isProduction = appConfig.production;

View File

@@ -1,48 +0,0 @@
'use client';
import Link from 'next/link';
import { ChevronRightIcon } from 'lucide-react';
import { PersonalAccountDropdown } from '@kit/accounts/personal-account-dropdown';
import { useSignOut } from '@kit/supabase/hooks/use-sign-out';
import { useUserSession } from '@kit/supabase/hooks/use-user-session';
import { Button } from '@kit/ui/button';
import pathsConfig from '~/config/paths.config';
export function SiteHeaderAccountSection() {
const signOut = useSignOut();
const userSession = useUserSession();
if (userSession.data) {
return (
<PersonalAccountDropdown
session={userSession.data}
paths={{
home: pathsConfig.app.home,
}}
signOutRequested={() => signOut.mutateAsync()}
/>
);
}
return <AuthButtons />;
}
function AuthButtons() {
return (
<div className={'hidden space-x-2 lg:flex'}>
<Button variant={'link'}>
<Link href={pathsConfig.auth.signIn}>Sign In</Link>
</Button>
<Link href={pathsConfig.auth.signUp}>
<Button className={'rounded-full'}>
Sign Up
<ChevronRightIcon className={'h-4'} />
</Button>
</Link>
</div>
);
}

View File

@@ -8,10 +8,10 @@ import { ChevronLeftIcon, ChevronRightIcon } from 'lucide-react';
import { If } from '@kit/ui/if';
import { Mdx } from '@kit/ui/mdx';
import { SitePageHeader } from '~/(marketing)/components/site-page-header';
import { DocsCards } from '~/(marketing)/docs/components/docs-cards';
import { DocumentationPageLink } from '~/(marketing)/docs/components/documentation-page-link';
import { getDocumentationPageTree } from '~/(marketing)/docs/utils/get-documentation-page-tree';
import { SitePageHeader } from '~/(marketing)/_components/site-page-header';
import { DocsCards } from '~/(marketing)/docs/_components/docs-cards';
import { DocumentationPageLink } from '~/(marketing)/docs/_components/documentation-page-link';
import { getDocumentationPageTree } from '~/(marketing)/docs/_lib/get-documentation-page-tree';
import { withI18n } from '~/lib/i18n/with-i18n';
const getPageBySlug = cache((slug: string) => {

View File

@@ -13,7 +13,7 @@ import { Heading } from '@kit/ui/heading';
import { If } from '@kit/ui/if';
import { cn } from '@kit/ui/utils';
import type { ProcessedDocumentationPage } from '../utils/build-documentation-tree';
import type { ProcessedDocumentationPage } from '~/(marketing)/docs/_lib/build-documentation-tree';
const DocsNavLink: React.FC<{
label: string;

View File

@@ -1,8 +1,8 @@
import type { DocumentationPage } from 'contentlayer/generated';
import { allDocumentationPages } from 'contentlayer/generated';
import DocsNavigation from './components/docs-navigation';
import { buildDocumentationTree } from './utils/build-documentation-tree';
import DocsNavigation from '~/(marketing)/docs/_components/docs-navigation';
import { buildDocumentationTree } from '~/(marketing)/docs/_lib/build-documentation-tree';
function DocsLayout({ children }: React.PropsWithChildren) {
const tree = buildDocumentationTree(allDocumentationPages);

View File

@@ -1,12 +1,11 @@
import { allDocumentationPages } from 'contentlayer/generated';
import { SitePageHeader } from '~/(marketing)/_components/site-page-header';
import { DocsCards } from '~/(marketing)/docs/_components/docs-cards';
import { buildDocumentationTree } from '~/(marketing)/docs/_lib/build-documentation-tree';
import appConfig from '~/config/app.config';
import { withI18n } from '~/lib/i18n/with-i18n';
import { SitePageHeader } from '../components/site-page-header';
import { DocsCards } from './components/docs-cards';
import { buildDocumentationTree } from './utils/build-documentation-tree';
export const metadata = {
title: `Documentation - ${appConfig.name}`,
};

View File

@@ -1,9 +1,8 @@
import { ChevronDownIcon } from 'lucide-react';
import { SitePageHeader } from '~/(marketing)/_components/site-page-header';
import { withI18n } from '~/lib/i18n/with-i18n';
import { SitePageHeader } from '../components/site-page-header';
export const metadata = {
title: 'FAQ',
};

View File

@@ -1,12 +1,19 @@
import { getSupabaseServerComponentClient } from '@kit/supabase/server-component-client';
import { SiteFooter } from '~/(marketing)/_components/site-footer';
import { SiteHeader } from '~/(marketing)/_components/site-header';
import { withI18n } from '~/lib/i18n/with-i18n';
import { SiteFooter } from './components/site-footer';
import { SiteHeader } from './components/site-header';
async function SiteLayout(props: React.PropsWithChildren) {
const client = getSupabaseServerComponentClient();
const {
data: { session },
} = await client.auth.getSession();
function SiteLayout(props: React.PropsWithChildren) {
return (
<>
<SiteHeader />
<SiteHeader session={session} />
{props.children}

View File

@@ -1,11 +1,10 @@
import { PricingTable } from '@kit/billing/components/pricing-table';
import { SitePageHeader } from '~/(marketing)/_components/site-page-header';
import billingConfig from '~/config/billing.config';
import pathsConfig from '~/config/paths.config';
import { withI18n } from '~/lib/i18n/with-i18n';
import { SitePageHeader } from '../components/site-page-header';
export const metadata = {
title: 'Pricing',
};