From 2f3efa3aef61e9e4df2bd5e6142012f406ee1016 Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Mon, 9 Sep 2024 18:46:25 +0100 Subject: [PATCH] Rename some files and tidy up navbar --- .env | 19 +--- .eslintrc.cjs | 58 +++++------- .vscode/settings.json | 3 +- bun.lockb | Bin 281771 -> 281842 bytes package.json | 5 +- src/app/(site)/(auth)/register/page.tsx | 6 +- src/app/(site)/(auth)/signin/page.tsx | 6 +- src/app/_components/trending-images.tsx | 10 -- src/app/layout.tsx | 22 +++-- src/app/page.tsx | 2 +- ...strationForm.tsx => registration-form.tsx} | 0 .../auth/{SignInForm.tsx => signin-form.tsx} | 0 src/components/icons.tsx | 9 +- src/components/navbar/top-navbar.tsx | 87 ++++++++++++++---- src/components/pages/landing-page.tsx | 10 +- src/components/trending-images.tsx | 13 +-- ...{CopyTextInput.tsx => copy-text-input.tsx} | 0 .../{GifContainer.tsx => gif-container.tsx} | 0 .../{ImageUpload.tsx => image-upload.tsx} | 0 .../widgets/{Loading.tsx => loading.tsx} | 0 .../{LoginButton.tsx => login-button.tsx} | 16 ++-- ...ocialLogin.tsx => social-login-button.tsx} | 0 .../{TaggedInput.tsx => tagged-input.tsx} | 0 ...rNavDropdown.tsx => user-nav-dropdown.tsx} | 23 ++--- src/config/top-nav.config.tsx | 9 +- src/server/api/routers/auth.ts | 5 +- src/trpc/react.tsx | 2 +- src/types/index.d.ts | 1 - ssl-proxy.json | 8 ++ 29 files changed, 159 insertions(+), 155 deletions(-) delete mode 100644 src/app/_components/trending-images.tsx rename src/components/forms/auth/{RegistrationForm.tsx => registration-form.tsx} (100%) rename src/components/forms/auth/{SignInForm.tsx => signin-form.tsx} (100%) rename src/components/widgets/{CopyTextInput.tsx => copy-text-input.tsx} (100%) rename src/components/widgets/{GifContainer.tsx => gif-container.tsx} (100%) rename src/components/widgets/{ImageUpload.tsx => image-upload.tsx} (100%) rename src/components/widgets/{Loading.tsx => loading.tsx} (100%) rename src/components/widgets/login/{LoginButton.tsx => login-button.tsx} (52%) rename src/components/widgets/login/{SocialLogin.tsx => social-login-button.tsx} (100%) rename src/components/widgets/{TaggedInput.tsx => tagged-input.tsx} (100%) rename src/components/widgets/{UserNavDropdown.tsx => user-nav-dropdown.tsx} (64%) create mode 100644 ssl-proxy.json diff --git a/.env b/.env index 021615e..8f46d6a 100644 --- a/.env +++ b/.env @@ -1,24 +1,11 @@ -# When adding additional environment variables, the schema in "/src/env.js" -# should be updated accordingly. - -# Drizzle DATABASE_URL="postgresql://postgres:hackme@localhost:5432/opengifame" -# Next Auth -# You can generate a new secret on the command line with: -# openssl rand -base64 32 -# https://next-auth.js.org/configuration/options#secret NEXTAUTH_SECRET="tAOVgxpY1U0BsnPCr6Gf8WVkmRMkp06ztUfwMhBKMQ4=" -NEXTAUTH_URL="http://localhost:3000" - -# Next Auth Discord Provider -DISCORD_CLIENT_ID="" -DISCORD_CLIENT_SECRET="" - +NEXTAUTH_URL="https://opengifame.dev.fergl.ie:3000" NEXT_PUBLIC_SITE_NAME=Open Gifame NEXT_PUBLIC_SITE_DESCRIPTION=Robot powered giffage -NEXT_PUBLIC_SITE_URL=https://gifs.ferg.al, -NEXT_PUBLIC_SITE_OG_IMAGE=http://localhost:3000/icon.png +NEXT_PUBLIC_SITE_URL=https://opengifame.dev.fergl.ie:3000 +NEXT_PUBLIC_SITE_OG_IMAGE=https://opengifame.dev.fergl.ie:3000/icon.png NEXT_PUBLIC_SITE_TWITTER=https://twitter.com/opengifame NEXT_PUBLIC_SITE_GITHUB=https://github.com/fergalmoran/opengifame diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 88c180d..e59a9b2 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,61 +1,53 @@ /** @type {import("eslint").Linter.Config} */ const config = { - "parser": "@typescript-eslint/parser", - "parserOptions": { - "project": true + parser: "@typescript-eslint/parser", + parserOptions: { + project: true, }, - "plugins": [ - "@typescript-eslint", - "drizzle" - ], - "extends": [ + plugins: ["@typescript-eslint", "drizzle"], + extends: [ "next/core-web-vitals", "plugin:@typescript-eslint/recommended-type-checked", - "plugin:@typescript-eslint/stylistic-type-checked" + "plugin:@typescript-eslint/stylistic-type-checked", ], - "rules": { + rules: { + "@typescript-eslint/prefer-nullish-coalescing": "off", "@typescript-eslint/array-type": "off", "@typescript-eslint/consistent-type-definitions": "off", "@typescript-eslint/consistent-type-imports": [ "warn", { - "prefer": "type-imports", - "fixStyle": "inline-type-imports" - } + prefer: "type-imports", + fixStyle: "inline-type-imports", + }, ], "@typescript-eslint/no-unused-vars": [ "warn", { - "argsIgnorePattern": "^_" - } + argsIgnorePattern: "^_", + }, ], "@typescript-eslint/require-await": "off", "@typescript-eslint/no-misused-promises": [ "error", { - "checksVoidReturn": { - "attributes": false - } - } + checksVoidReturn: { + attributes: false, + }, + }, ], "drizzle/enforce-delete-with-where": [ "error", { - "drizzleObjectName": [ - "db", - "ctx.db" - ] - } + drizzleObjectName: ["db", "ctx.db"], + }, ], "drizzle/enforce-update-with-where": [ "error", { - "drizzleObjectName": [ - "db", - "ctx.db" - ] - } - ] - } -} -module.exports = config; \ No newline at end of file + drizzleObjectName: ["db", "ctx.db"], + }, + ], + }, +}; +module.exports = config; diff --git a/.vscode/settings.json b/.vscode/settings.json index cae72af..b3b431b 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,4 @@ { - "workbench.colorTheme": "Tinacious Design (High Contrast)" + // "workbench.colorTheme": "Tinacious Design (High Contrast)" + "workbench.colorTheme": "Cyberpunk 2077 rebuild", } \ No newline at end of file diff --git a/bun.lockb b/bun.lockb index 6fda6fea2038dd41279258d8f72936ed8379b1e5..bb94666c978a5c2b03d065cec993e0bbc5a14a17 100755 GIT binary patch delta 51543 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 R+gaC@bR%>)-np+?^*=YvjvxR4 diff --git a/package.json b/package.json index fc178a2..aeb404c 100644 --- a/package.json +++ b/package.json @@ -90,14 +90,15 @@ "zod": "^3.23.8" }, "devDependencies": { - "@types/eslint": "^9.6.1", + "@faker-js/faker": "^9.0.0", + "@types/eslint": "^8.56.12", "@types/node": "^22.5.4", "@types/react": "^18.3.5", "@types/react-dom": "^18.3.0", "@typescript-eslint/eslint-plugin": "^8.4.0", "@typescript-eslint/parser": "^8.4.0", "drizzle-kit": "^0.24.2", - "eslint": "^9.10.0", + "eslint": "^8.57.0", "eslint-config-next": "^14.2.8", "eslint-plugin-drizzle": "^0.2.3", "postcss": "^8.4.45", diff --git a/src/app/(site)/(auth)/register/page.tsx b/src/app/(site)/(auth)/register/page.tsx index 39066b8..964ae53 100644 --- a/src/app/(site)/(auth)/register/page.tsx +++ b/src/app/(site)/(auth)/register/page.tsx @@ -1,12 +1,10 @@ "use client"; import React from "react"; -import RegistrationForm from "@/components/forms/auth/RegistrationForm"; -import SocialLogin from "@/components/widgets/login/SocialLogin"; +import RegistrationForm from "@/components/forms/auth/registration-form"; +import SocialLogin from "@/components/widgets/login/social-login-button"; import Link from "next/link"; import { Icons } from "@/components/icons"; -import { cn } from "@/lib/utils"; -import { buttonVariants } from "@/components/ui/button"; const RegisterPage: React.FC = () => { return ( diff --git a/src/app/(site)/(auth)/signin/page.tsx b/src/app/(site)/(auth)/signin/page.tsx index f2e7d82..36092e6 100644 --- a/src/app/(site)/(auth)/signin/page.tsx +++ b/src/app/(site)/(auth)/signin/page.tsx @@ -1,11 +1,9 @@ "use client"; -import SocialLogin from "@/components/widgets/login/SocialLogin"; +import SocialLogin from "@/components/widgets/login/social-login-button"; import Link from "next/link"; import React from "react"; import { Icons } from "@/components/icons"; -import { cn } from "@/lib/utils"; -import { buttonVariants } from "@/components/ui/button"; -import SignInForm from "@/components/forms/auth/SignInForm"; +import SignInForm from "@/components/forms/auth/signin-form"; const SignInPage = () => { return ( diff --git a/src/app/_components/trending-images.tsx b/src/app/_components/trending-images.tsx deleted file mode 100644 index dcb3285..0000000 --- a/src/app/_components/trending-images.tsx +++ /dev/null @@ -1,10 +0,0 @@ -"use client"; - -import { useState } from "react"; - -import { api } from "@/trpc/react"; - -export function TrendingImages() { - const [name, setName] = useState(""); - return
Trending Images
; -} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 1baf2a5..c0e40ea 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,7 +1,7 @@ -import { Inter as FontSans } from "next/font/google"; +import { Roboto as font } from "next/font/google"; import "@/styles/globals.css"; -import { type Metadata, Viewport } from "next"; +import { type Metadata, type Viewport } from "next"; import { TRPCReactProvider } from "@/trpc/react"; import { cn } from "@/lib/utils"; @@ -12,17 +12,18 @@ import React from "react"; import TopNavbar from "@/components/navbar/top-navbar"; import { dashboardConfig } from "@/config/top-nav.config"; import { siteConfig } from "@/config/site.config"; +import { getServerSession } from "next-auth"; -const fontSans = FontSans({ - subsets: ["latin"], - variable: "--font-sans", -}); export const viewport: Viewport = { themeColor: [ { media: "(prefers-color-scheme: light)", color: "white" }, { media: "(prefers-color-scheme: dark)", color: "black" }, ], }; +const f = font({ + weight: "400", + subsets: ["latin"], +}); export const metadata: Metadata = { title: "Open Gifame", @@ -30,9 +31,10 @@ export const metadata: Metadata = { icons: [{ rel: "icon", url: "/favicon.ico" }], }; -export default function RootLayout({ +export default async function RootLayout({ children, }: Readonly<{ children: React.ReactNode }>) { + const session = await getServerSession(); return ( @@ -45,15 +47,15 @@ export default function RootLayout({ - - {children} + +
{children}
diff --git a/src/app/page.tsx b/src/app/page.tsx index fbb0cdd..427b17a 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,5 +1,5 @@ -import { TrendingImages } from "@/app/_components/trending-images"; import LandingPage from "@/components/pages/landing-page"; +import { TrendingImages } from "@/components/trending-images"; import { getServerAuthSession } from "@/server/auth"; import { HydrateClient } from "@/trpc/server"; diff --git a/src/components/forms/auth/RegistrationForm.tsx b/src/components/forms/auth/registration-form.tsx similarity index 100% rename from src/components/forms/auth/RegistrationForm.tsx rename to src/components/forms/auth/registration-form.tsx diff --git a/src/components/forms/auth/SignInForm.tsx b/src/components/forms/auth/signin-form.tsx similarity index 100% rename from src/components/forms/auth/SignInForm.tsx rename to src/components/forms/auth/signin-form.tsx diff --git a/src/components/icons.tsx b/src/components/icons.tsx index 5d79b19..3cfe83e 100644 --- a/src/components/icons.tsx +++ b/src/components/icons.tsx @@ -25,6 +25,7 @@ import { X, type Icon as LucideIcon, Terminal, + LogIn, } from "lucide-react"; export type Icon = typeof LucideIcon; @@ -46,9 +47,9 @@ export const Icons = { user: User, arrowRight: ArrowRight, help: HelpCircle, + login: LogIn, logo: ({ ...props }: LucideProps) => ( - {/* Background */} - - {/* Abstract prism shape - significantly enlarged */} - - {/* Color refraction lines - adjusted for new size */} - - {/* Circular highlight - adjusted position and size */} = ({ items }) => { +const TopNavbar: React.FC = ({ items, session }) => { + const segment = useSelectedLayoutSegment(); return ( -
-
-
- - - - {siteConfig.name} - - -
+
+
+
+
+ + + + {siteConfig.name} + + - {/* */} + {items?.length ? ( + + ) : null} +
+
+
+
+
+
+ +
+
+
+
+
+ Mobile menu +
+
+ +
- +
); }; diff --git a/src/components/pages/landing-page.tsx b/src/components/pages/landing-page.tsx index 8886c1f..b58d3cb 100644 --- a/src/components/pages/landing-page.tsx +++ b/src/components/pages/landing-page.tsx @@ -3,11 +3,11 @@ import React from "react"; const LandingPage: React.FC = () => { return (
-

- Warning contains Gifs -

-
- Sign In +
+

+ Warning contains{" "} + Gifs +

); diff --git a/src/components/trending-images.tsx b/src/components/trending-images.tsx index f99ab54..2429f78 100644 --- a/src/components/trending-images.tsx +++ b/src/components/trending-images.tsx @@ -21,28 +21,21 @@ export function TrendingImages() { {latestPost ? (

Your most recent post: {latestPost.name}

) : ( -

You have no posts yet.

+

No images yet.

)}
{ e.preventDefault(); createPost.mutate({ name }); }} - className="flex flex-col gap-2" + className="flex flex-col gap-2 my-4" > - setName(e.target.value)} - className="w-full rounded-full px-4 py-2 text-black" - />
diff --git a/src/components/widgets/CopyTextInput.tsx b/src/components/widgets/copy-text-input.tsx similarity index 100% rename from src/components/widgets/CopyTextInput.tsx rename to src/components/widgets/copy-text-input.tsx diff --git a/src/components/widgets/GifContainer.tsx b/src/components/widgets/gif-container.tsx similarity index 100% rename from src/components/widgets/GifContainer.tsx rename to src/components/widgets/gif-container.tsx diff --git a/src/components/widgets/ImageUpload.tsx b/src/components/widgets/image-upload.tsx similarity index 100% rename from src/components/widgets/ImageUpload.tsx rename to src/components/widgets/image-upload.tsx diff --git a/src/components/widgets/Loading.tsx b/src/components/widgets/loading.tsx similarity index 100% rename from src/components/widgets/Loading.tsx rename to src/components/widgets/loading.tsx diff --git a/src/components/widgets/login/LoginButton.tsx b/src/components/widgets/login/login-button.tsx similarity index 52% rename from src/components/widgets/login/LoginButton.tsx rename to src/components/widgets/login/login-button.tsx index 3102993..6ca06fa 100644 --- a/src/components/widgets/login/LoginButton.tsx +++ b/src/components/widgets/login/login-button.tsx @@ -3,23 +3,23 @@ import React from "react"; import { signIn } from "next-auth/react"; import { RiLoginCircleLine } from "react-icons/ri"; -import UserNavDropdown from "../UserNavDropdown"; +import UserNavDropdown from "../user-nav-dropdown"; +import { type Session } from "next-auth"; +import { Button } from "@/components/ui/button"; +import { Icons } from "@/components/icons"; interface ILoginButtonProps { - session: any; + session: Session | null; } const LoginButton: React.FC = ({ session }) => { return session ? ( ) : ( - + ); }; diff --git a/src/components/widgets/login/SocialLogin.tsx b/src/components/widgets/login/social-login-button.tsx similarity index 100% rename from src/components/widgets/login/SocialLogin.tsx rename to src/components/widgets/login/social-login-button.tsx diff --git a/src/components/widgets/TaggedInput.tsx b/src/components/widgets/tagged-input.tsx similarity index 100% rename from src/components/widgets/TaggedInput.tsx rename to src/components/widgets/tagged-input.tsx diff --git a/src/components/widgets/UserNavDropdown.tsx b/src/components/widgets/user-nav-dropdown.tsx similarity index 64% rename from src/components/widgets/UserNavDropdown.tsx rename to src/components/widgets/user-nav-dropdown.tsx index 3f32092..119c9ab 100644 --- a/src/components/widgets/UserNavDropdown.tsx +++ b/src/components/widgets/user-nav-dropdown.tsx @@ -1,28 +1,25 @@ -'use client'; -import { logger } from '@lib/logger'; -import React, { Fragment } from 'react'; -import { Menu, Transition } from '@headlessui/react'; -import { signOut } from 'next-auth/react'; +"use client"; +import React, { Fragment } from "react"; +import { Menu, Transition } from "@headlessui/react"; +import { signOut } from "next-auth/react"; +import { logger } from "@/lib/logger"; interface IUserNavDropdownProps { session: any; } const UserNavDropdown: React.FC = ({ session }) => { React.useEffect(() => { - logger.debug('UserNavDropdown', 'session', session); + logger.debug("UserNavDropdown", "session", session); }, [session]); return (
- +
- + Open user menu Profile image @@ -37,7 +34,7 @@ const UserNavDropdown: React.FC = ({ session }) => { leaveFrom="transform opacity-100 scale-100" leaveTo="transform opacity-0 scale-95" > - + {({ active }) => (