From d29a60ae3a9e65f80d9fcf95a15058d054411114 Mon Sep 17 00:00:00 2001 From: SrIzan10 <66965250+SrIzan10@users.noreply.github.com> Date: Tue, 12 Dec 2023 19:30:33 +0100 Subject: [PATCH] feat: link shortener --- .eslintrc.json | 5 +++- package.json | 1 + public/blog/atom.xml | 2 +- public/blog/rss.xml | 2 +- src/app/(pages)/blog/[id]/page.tsx | 4 +-- src/app/(pages)/blog/page.tsx | 4 +-- src/app/(pages)/go/[name]/page.tsx | 29 +++++++++++++++++++ .../{BlogNavBar.tsx => NavBar.tsx} | 13 ++++++--- src/app/_css/LinkShortenerVerification.css | 3 ++ src/app/globals.css | 4 +++ yarn.lock | 12 ++++++++ 11 files changed, 68 insertions(+), 11 deletions(-) create mode 100644 src/app/(pages)/go/[name]/page.tsx rename src/app/_components/{BlogNavBar.tsx => NavBar.tsx} (67%) create mode 100644 src/app/_css/LinkShortenerVerification.css diff --git a/.eslintrc.json b/.eslintrc.json index bffb357..d2a18fa 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,3 +1,6 @@ { - "extends": "next/core-web-vitals" + "extends": "next/core-web-vitals", + "rules": { + "react/no-unescaped-entities": "off" + } } diff --git a/package.json b/package.json index 7836e32..57c6872 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "@emotion/styled": "^11.11.0", "@mui/lab": "^5.0.0-alpha.153", "@mui/material": "^5.14.18", + "@vercel/edge-config": "^0.4.1", "dayjs": "^1.11.10", "feed": "^4.2.2", "glob": "^10.3.10", diff --git a/public/blog/atom.xml b/public/blog/atom.xml index 6c3dc2f..2530408 100644 --- a/public/blog/atom.xml +++ b/public/blog/atom.xml @@ -2,7 +2,7 @@ https://srizan.dev/blog Sr Izan's Blog - 2023-12-03T19:13:44.979Z + 2023-12-12T18:15:17.193Z https://github.com/jpmonette/feed Sr Izan diff --git a/public/blog/rss.xml b/public/blog/rss.xml index 6daa7e4..1e61f40 100644 --- a/public/blog/rss.xml +++ b/public/blog/rss.xml @@ -4,7 +4,7 @@ Sr Izan's Blog https://srizan.dev/blog My little donowall place on the net - Sun, 03 Dec 2023 19:13:44 GMT + Tue, 12 Dec 2023 18:15:17 GMT https://validator.w3.org/feed/docs/rss2.html https://github.com/jpmonette/feed en diff --git a/src/app/(pages)/blog/[id]/page.tsx b/src/app/(pages)/blog/[id]/page.tsx index f714941..58ae4e9 100644 --- a/src/app/(pages)/blog/[id]/page.tsx +++ b/src/app/(pages)/blog/[id]/page.tsx @@ -2,7 +2,7 @@ import ReactMarkdown from 'react-markdown' import remarkGfm from 'remark-gfm' import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; import { atomDark } from 'react-syntax-highlighter/dist/esm/styles/prism' -import BlogNavBar from "../../../_components/BlogNavBar"; +import BlogNavBar from "../../../_components/NavBar"; import '../../../_css/BlogPost.css'; import React from "react"; import jsonDataArray from '../../../../../public/blogPosts.json'; @@ -32,7 +32,7 @@ export default async function Page({ params }: { params: { id: string } }) { } return (
- +
Blog - +
{blogPosts.map((post) => { return ( diff --git a/src/app/(pages)/go/[name]/page.tsx b/src/app/(pages)/go/[name]/page.tsx new file mode 100644 index 0000000..7e540df --- /dev/null +++ b/src/app/(pages)/go/[name]/page.tsx @@ -0,0 +1,29 @@ +import NavBar from "@/app/_components/NavBar"; +import { get } from '@vercel/edge-config'; +import Link from "next/link"; +import { redirect } from "next/navigation"; +import '../../../_css/LinkShortenerVerification.css'; +import { Metadata } from 'next'; + +export default async function Page({ params }: { params: { name: string } }) { + const getLink = await get(params.name) as string | undefined; + if (!getLink) { + redirect('../notfound') + } + const url = new URL(getLink); + return ( +
+ +
+

This link sends you to {url.hostname}

+ Go there I don't care +
+
+ ) +} + +export async function generateMetadata({ params }: { params: { name: string } }): Promise { + return { + title: `Link shortener ID ${params.name}` + } +} \ No newline at end of file diff --git a/src/app/_components/BlogNavBar.tsx b/src/app/_components/NavBar.tsx similarity index 67% rename from src/app/_components/BlogNavBar.tsx rename to src/app/_components/NavBar.tsx index c16dd82..737aa06 100644 --- a/src/app/_components/BlogNavBar.tsx +++ b/src/app/_components/NavBar.tsx @@ -5,10 +5,14 @@ import { useEffect, useState } from 'react'; import '../_css/BlogNavBar.css' import Link from 'next/link'; -export default function BlogNavBar(props: Props) { +export default function NavBar(props: Props) { const [isScrolled, setIsScrolled] = useState(false); + const [title, setTitle] = useState(props.title || 'Unnamed page'); useEffect(() => { + if (props.isBlog) { + setTitle('Blog'); + } let prevScrollpos = window.scrollY; const handleScroll = () => { @@ -22,16 +26,17 @@ export default function BlogNavBar(props: Props) { return () => { window.removeEventListener('scroll', handleScroll); }; + // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return (
main profile picture -

{props.title || 'Sr Izan\'s blog'}

+

{title}

- Go back {props.title ? 'to posts' : 'home'} + Go back
) } -type Props = { title?: string } \ No newline at end of file +type Props = { title?: string, isBlog?: boolean } \ No newline at end of file diff --git a/src/app/_css/LinkShortenerVerification.css b/src/app/_css/LinkShortenerVerification.css new file mode 100644 index 0000000..11d703c --- /dev/null +++ b/src/app/_css/LinkShortenerVerification.css @@ -0,0 +1,3 @@ +.center { + text-align: center; +} \ No newline at end of file diff --git a/src/app/globals.css b/src/app/globals.css index de5956e..0f28b92 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -21,6 +21,10 @@ 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; } +.navbarMargin { + margin-top: 90px; +} + a { font-weight: 500; color: var(--link-color); diff --git a/yarn.lock b/yarn.lock index 9810844..f9ea3ec 100644 --- a/yarn.lock +++ b/yarn.lock @@ -601,6 +601,18 @@ resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== +"@vercel/edge-config-fs@0.1.0": + version "0.1.0" + resolved "https://registry.yarnpkg.com/@vercel/edge-config-fs/-/edge-config-fs-0.1.0.tgz#cda8327f611418c1d1cbb28c6bed02d782be928b" + integrity sha512-NRIBwfcS0bUoUbRWlNGetqjvLSwgYH/BqKqDN7vK1g32p7dN96k0712COgaz6VFizAm9b0g6IG6hR6+hc0KCPg== + +"@vercel/edge-config@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@vercel/edge-config/-/edge-config-0.4.1.tgz#c247011dcd05ce6a6b4d17139215c8f684d83cb3" + integrity sha512-4Mc3H7lE+x4RrL17nY8CWeEorvJHbkNbQTy9p8H1tO7y11WeKj5xeZSr07wNgfWInKXDUwj5FZ3qd/jIzjPxug== + dependencies: + "@vercel/edge-config-fs" "0.1.0" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"