From 3dc8a0359778014e2a7bcabd201c137ce688635a Mon Sep 17 00:00:00 2001 From: karim-daw Date: Tue, 11 Jun 2024 22:26:45 +0100 Subject: [PATCH 1/7] add node fetch --- package-lock.json | 199 +++++++++++++++++++++++++++++++++------------- package.json | 7 +- 2 files changed, 146 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8a4e61a..f10bea2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,10 +17,11 @@ "@vercel/analytics": "^1.2.2", "@vercel/speed-insights": "^1.0.10", "ics": "^3.7.2", - "next": "14.2.1", + "next": "^14.2.3", "next-mdx-remote": "^4.4.1", - "react": "^18", - "react-dom": "^18", + "node-fetch": "^3.3.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "slugify": "^1.6.6", "yaml": "^2.4.2" }, @@ -1956,9 +1957,9 @@ } }, "node_modules/@next/env": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.1.tgz", - "integrity": "sha512-qsHJle3GU3CmVx7pUoXcghX4sRN+vINkbLdH611T8ZlsP//grzqVW87BSUgOZeSAD4q7ZdZicdwNe/20U2janA==" + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.3.tgz", + "integrity": "sha512-W7fd7IbkfmeeY2gXrzJYDx8D2lWKbVoTIj1o1ScPHNzvp30s1AuoEFSdr39bC5sjxJaxTtq3OTCZboNp0lNWHA==" }, "node_modules/@next/eslint-plugin-next": { "version": "14.2.1", @@ -1970,9 +1971,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.1.tgz", - "integrity": "sha512-kGjnjcIJehEcd3rT/3NAATJQndAEELk0J9GmGMXHSC75TMnvpOhONcjNHbjtcWE5HUQnIHy5JVkatrnYm1QhVw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.3.tgz", + "integrity": "sha512-3pEYo/RaGqPP0YzwnlmPN2puaF2WMLM3apt5jLW2fFdXD9+pqcoTzRk+iZsf8ta7+quAe4Q6Ms0nR0SFGFdS1A==", "cpu": [ "arm64" ], @@ -1985,9 +1986,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.1.tgz", - "integrity": "sha512-dAdWndgdQi7BK2WSXrx4lae7mYcOYjbHJUhvOUnJjMNYrmYhxbbvJ2xElZpxNxdfA6zkqagIB9He2tQk+l16ew==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.3.tgz", + "integrity": "sha512-6adp7waE6P1TYFSXpY366xwsOnEXM+y1kgRpjSRVI2CBDOcbRjsJ67Z6EgKIqWIue52d2q/Mx8g9MszARj8IEA==", "cpu": [ "x64" ], @@ -2000,9 +2001,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.1.tgz", - "integrity": "sha512-2ZctfnyFOGvTkoD6L+DtQtO3BfFz4CapoHnyLTXkOxbZkVRgg3TQBUjTD/xKrO1QWeydeo8AWfZRg8539qNKrg==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.3.tgz", + "integrity": "sha512-cuzCE/1G0ZSnTAHJPUT1rPgQx1w5tzSX7POXSLaS7w2nIUJUD+e25QoXD/hMfxbsT9rslEXugWypJMILBj/QsA==", "cpu": [ "arm64" ], @@ -2015,9 +2016,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.1.tgz", - "integrity": "sha512-jazZXctiaanemy4r+TPIpFP36t1mMwWCKMsmrTRVChRqE6putyAxZA4PDujx0SnfvZHosjdkx9xIq9BzBB5tWg==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.3.tgz", + "integrity": "sha512-0D4/oMM2Y9Ta3nGuCcQN8jjJjmDPYpHX9OJzqk42NZGJocU2MqhBq5tWkJrUQOQY9N+In9xOdymzapM09GeiZw==", "cpu": [ "arm64" ], @@ -2030,9 +2031,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.1.tgz", - "integrity": "sha512-VjCHWCjsAzQAAo8lkBOLEIkBZFdfW+Z18qcQ056kL4KpUYc8o59JhLDCBlhg+hINQRgzQ2UPGma2AURGOH0+Qg==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.3.tgz", + "integrity": "sha512-ENPiNnBNDInBLyUU5ii8PMQh+4XLr4pG51tOp6aJ9xqFQ2iRI6IH0Ds2yJkAzNV1CfyagcyzPfROMViS2wOZ9w==", "cpu": [ "x64" ], @@ -2045,9 +2046,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.1.tgz", - "integrity": "sha512-7HZKYKvAp4nAHiHIbY04finRqjeYvkITOGOurP1aLMexIFG/1+oCnqhGogBdc4lao/lkMW1c+AkwWSzSlLasqw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.3.tgz", + "integrity": "sha512-BTAbq0LnCbF5MtoM7I/9UeUu/8ZBY0i8SFjUMCbPDOLv+un67e2JgyN4pmgfXBwy/I+RHu8q+k+MCkDN6P9ViQ==", "cpu": [ "x64" ], @@ -2060,9 +2061,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.1.tgz", - "integrity": "sha512-YGHklaJ/Cj/F0Xd8jxgj2p8po4JTCi6H7Z3Yics3xJhm9CPIqtl8erlpK1CLv+HInDqEWfXilqatF8YsLxxA2Q==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.3.tgz", + "integrity": "sha512-AEHIw/dhAMLNFJFJIJIyOFDzrzI5bAjI9J26gbO5xhAKHYTZ9Or04BesFPXiAYXDNdrwTP2dQceYA4dL1geu8A==", "cpu": [ "arm64" ], @@ -2075,9 +2076,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.1.tgz", - "integrity": "sha512-o+ISKOlvU/L43ZhtAAfCjwIfcwuZstiHVXq/BDsZwGqQE0h/81td95MPHliWCnFoikzWcYqh+hz54ZB2FIT8RA==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.3.tgz", + "integrity": "sha512-vga40n1q6aYb0CLrM+eEmisfKCR45ixQYXuBXxOOmmoV8sYST9k7E3US32FsY+CkkF7NtzdcebiFT4CHuMSyZw==", "cpu": [ "ia32" ], @@ -2090,9 +2091,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.1.tgz", - "integrity": "sha512-GmRoTiLcvCLifujlisknv4zu9/C4i9r0ktsA8E51EMqJL4bD4CpO7lDYr7SrUxCR0tS4RVcrqKmCak24T0ohaw==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.3.tgz", + "integrity": "sha512-Q1/zm43RWynxrO7lW4ehciQVj+5ePBhOK+/K2P7pLFX3JaJ/IZVC69SHidrmZSOkqz7ECIOhhy7XhAFG4JYyHA==", "cpu": [ "x64" ], @@ -4063,6 +4064,14 @@ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-urls": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", @@ -5219,6 +5228,28 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5318,6 +5349,17 @@ "node": ">= 6" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -9975,11 +10017,11 @@ "dev": true }, "node_modules/next": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/next/-/next-14.2.1.tgz", - "integrity": "sha512-SF3TJnKdH43PMkCcErLPv+x/DY1YCklslk3ZmwaVoyUfDgHKexuKlf9sEfBQ69w+ue8jQ3msLb+hSj1T19hGag==", + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.3.tgz", + "integrity": "sha512-dowFkFTR8v79NPJO4QsBUtxv0g9BrS/phluVpMAt2ku7H+cbcBJlopXjkWlwxrk/xGqMemr7JkGPGemPrLLX7A==", "dependencies": { - "@next/env": "14.2.1", + "@next/env": "14.2.3", "@swc/helpers": "0.5.5", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", @@ -9994,15 +10036,15 @@ "node": ">=18.17.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "14.2.1", - "@next/swc-darwin-x64": "14.2.1", - "@next/swc-linux-arm64-gnu": "14.2.1", - "@next/swc-linux-arm64-musl": "14.2.1", - "@next/swc-linux-x64-gnu": "14.2.1", - "@next/swc-linux-x64-musl": "14.2.1", - "@next/swc-win32-arm64-msvc": "14.2.1", - "@next/swc-win32-ia32-msvc": "14.2.1", - "@next/swc-win32-x64-msvc": "14.2.1" + "@next/swc-darwin-arm64": "14.2.3", + "@next/swc-darwin-x64": "14.2.3", + "@next/swc-linux-arm64-gnu": "14.2.3", + "@next/swc-linux-arm64-musl": "14.2.3", + "@next/swc-linux-x64-gnu": "14.2.3", + "@next/swc-linux-x64-musl": "14.2.3", + "@next/swc-win32-arm64-msvc": "14.2.3", + "@next/swc-win32-ia32-msvc": "14.2.3", + "@next/swc-win32-x64-msvc": "14.2.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -10114,6 +10156,41 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", @@ -10986,9 +11063,9 @@ ] }, "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -10997,15 +11074,15 @@ } }, "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.2.0" + "react": "^18.3.1" } }, "node_modules/react-is": { @@ -11865,9 +11942,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } @@ -13452,6 +13529,14 @@ "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", "dev": true }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", diff --git a/package.json b/package.json index 5482f99..74e42fe 100644 --- a/package.json +++ b/package.json @@ -19,10 +19,11 @@ "@vercel/analytics": "^1.2.2", "@vercel/speed-insights": "^1.0.10", "ics": "^3.7.2", - "next": "14.2.1", + "next": "^14.2.3", "next-mdx-remote": "^4.4.1", - "react": "^18", - "react-dom": "^18", + "node-fetch": "^3.3.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", "slugify": "^1.6.6", "yaml": "^2.4.2" }, From 89a90c89959ee53c4a7b3c654cea5009e588d172 Mon Sep 17 00:00:00 2001 From: karim-daw Date: Tue, 11 Jun 2024 22:27:46 +0100 Subject: [PATCH 2/7] Add: fetch component for github markdown --- app/(single-page)/[pageType]/[slug]/page.tsx | 82 ++++++++++++++++++-- 1 file changed, 74 insertions(+), 8 deletions(-) diff --git a/app/(single-page)/[pageType]/[slug]/page.tsx b/app/(single-page)/[pageType]/[slug]/page.tsx index 7b89e40..3918ade 100644 --- a/app/(single-page)/[pageType]/[slug]/page.tsx +++ b/app/(single-page)/[pageType]/[slug]/page.tsx @@ -6,31 +6,97 @@ type PageType = "events" | "projects" | "trainings" | "faqs"; type SinglePageType = { pageType: PageType; slug: string; + directMdLink?: string; }; +type PageProps = { + page: { + metadata: { + title: string; + description?: string; + event?: object; + project?: object; + links?: { + url: string; + label: string; + }[]; + directMdLink?: string; + }; + slug: string; + content: string; + }; +}; + +async function fetchPageData(pageType: PageType, slug: string) { + let page = getPosts(pageType).find((page) => page.slug === slug); + + if (!page || pageType === "faqs") { + return null; + } + + if (page.metadata.directMdLink) { + try { + console.log( + `Fetching markdown content from ${page.metadata.directMdLink}`, + ); + const url = new URL(page.metadata.directMdLink); + const response = await fetch(url.toString()); + const content = await response.text(); + page.content = content; + } catch (error) { + console.error( + `Failed to fetch markdown content from ${page.metadata.directMdLink}:`, + error, + ); + return null; + } + } + + return page; +} + export async function generateStaticParams() { let posts: SinglePageType[] = []; + console.log( + "Generating static paths for single pages (events, projects, trainings)", + ); posts = [ ...posts, ...getPosts("projects").map((p) => { - return { slug: p.slug, pageType: "projects" as PageType }; + return { + slug: p.slug, + pageType: "projects" as PageType, + directMdLink: p.metadata.directMdLink, + }; }), ...getPosts("events").map((p) => { - return { slug: p.slug, pageType: "events" as PageType }; + return { + slug: p.slug, + pageType: "events" as PageType, + directMdLink: p.metadata.directMdLink, + }; }), ...getPosts("trainings").map((p) => { - return { slug: p.slug, pageType: "trainings" as PageType }; + return { + slug: p.slug, + pageType: "trainings" as PageType, + directMdLink: p.metadata.directMdLink, + }; }), ]; return posts; } -export default function SinglePage({ params }: { params: SinglePageType }) { - let page = getPosts(params.pageType).find( - (page) => page.slug === params.slug, - ); +export default async function SinglePage({ + params, +}: { + params: SinglePageType; +}) { + const { pageType, slug } = params; + + const page = await fetchPageData(pageType, slug); - if (!page || params.pageType === "faqs") { + if (!page) { notFound(); } From b975db301d3f96d69c5ff4dc016242375106e169 Mon Sep 17 00:00:00 2001 From: karim-daw Date: Tue, 11 Jun 2024 22:28:01 +0100 Subject: [PATCH 3/7] add test repo for directMdLink test --- content/projects/test.mdx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 content/projects/test.mdx diff --git a/content/projects/test.mdx b/content/projects/test.mdx new file mode 100644 index 0000000..93e7723 --- /dev/null +++ b/content/projects/test.mdx @@ -0,0 +1,23 @@ +--- +title: Example project +links: + - url: https://example.com + label: Website + - url: https://github.com/org + label: GitHub +directMdLink: https://github.com/cchangelabs/openepd/blob/dev/README.md +--- + +### Problem + +### Solution + +### Why Open Source? + +### License + +### Operating Model + +### About the team + +### Contact From e0f76a155c1174ac216ecd9663d0dd11f03d742e Mon Sep 17 00:00:00 2001 From: karim-daw Date: Tue, 11 Jun 2024 22:45:17 +0100 Subject: [PATCH 4/7] add html clean up regex --- app/(single-page)/[pageType]/[slug]/page.tsx | 21 +++++++++++++++++--- content/projects/test.mdx | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/app/(single-page)/[pageType]/[slug]/page.tsx b/app/(single-page)/[pageType]/[slug]/page.tsx index 3918ade..c8d9207 100644 --- a/app/(single-page)/[pageType]/[slug]/page.tsx +++ b/app/(single-page)/[pageType]/[slug]/page.tsx @@ -27,6 +27,23 @@ type PageProps = { }; }; +async function fetchMarkdownContent(url: string): Promise { + const response = await fetch(url); + if (!response.ok) { + throw new Error( + `Failed to fetch content from ${url}: ${response.statusText}`, + ); + } + let content = await response.text(); + content = cleanMarkdownContent(content); + return content; +} + +function cleanMarkdownContent(content: string): string { + // Use a regex to remove problematic HTML tags + return content.replace(/<[^>]*>/g, ""); +} + async function fetchPageData(pageType: PageType, slug: string) { let page = getPosts(pageType).find((page) => page.slug === slug); @@ -39,9 +56,7 @@ async function fetchPageData(pageType: PageType, slug: string) { console.log( `Fetching markdown content from ${page.metadata.directMdLink}`, ); - const url = new URL(page.metadata.directMdLink); - const response = await fetch(url.toString()); - const content = await response.text(); + const content = await fetchMarkdownContent(page.metadata.directMdLink); page.content = content; } catch (error) { console.error( diff --git a/content/projects/test.mdx b/content/projects/test.mdx index 93e7723..f8eeaee 100644 --- a/content/projects/test.mdx +++ b/content/projects/test.mdx @@ -5,7 +5,7 @@ links: label: Website - url: https://github.com/org label: GitHub -directMdLink: https://github.com/cchangelabs/openepd/blob/dev/README.md +directMdLink: https://raw.githubusercontent.com/cchangelabs/openepd/dev/README.md --- ### Problem From 1a3a51dd7c99335a21bb4ecebba15805d261ee63 Mon Sep 17 00:00:00 2001 From: karim-daw Date: Tue, 11 Jun 2024 23:03:23 +0100 Subject: [PATCH 5/7] cleanup --- app/(single-page)/[pageType]/[slug]/page.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/(single-page)/[pageType]/[slug]/page.tsx b/app/(single-page)/[pageType]/[slug]/page.tsx index c8d9207..4deff9e 100644 --- a/app/(single-page)/[pageType]/[slug]/page.tsx +++ b/app/(single-page)/[pageType]/[slug]/page.tsx @@ -6,7 +6,6 @@ type PageType = "events" | "projects" | "trainings" | "faqs"; type SinglePageType = { pageType: PageType; slug: string; - directMdLink?: string; }; type PageProps = { @@ -81,21 +80,18 @@ export async function generateStaticParams() { return { slug: p.slug, pageType: "projects" as PageType, - directMdLink: p.metadata.directMdLink, }; }), ...getPosts("events").map((p) => { return { slug: p.slug, pageType: "events" as PageType, - directMdLink: p.metadata.directMdLink, }; }), ...getPosts("trainings").map((p) => { return { slug: p.slug, pageType: "trainings" as PageType, - directMdLink: p.metadata.directMdLink, }; }), ]; From e0d50a81eab6cdd7a5ddf67d6cfea880bb1a208f Mon Sep 17 00:00:00 2001 From: karim-daw Date: Tue, 11 Jun 2024 23:03:36 +0100 Subject: [PATCH 6/7] add test projects direct link --- content/projects/carbon-service.mdx | 23 ++++++++++++++++++++++ content/projects/{test.mdx => openepd.mdx} | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 content/projects/carbon-service.mdx rename content/projects/{test.mdx => openepd.mdx} (90%) diff --git a/content/projects/carbon-service.mdx b/content/projects/carbon-service.mdx new file mode 100644 index 0000000..471cc06 --- /dev/null +++ b/content/projects/carbon-service.mdx @@ -0,0 +1,23 @@ +--- +title: carbon-service by Karim Daw +links: + - url: https://example.com + label: Website + - url: https://github.com/org + label: GitHub +directMdLink: https://raw.githubusercontent.com/karim-daw/carbon-service/master/README.md +--- + +### Problem + +### Solution + +### Why Open Source? + +### License + +### Operating Model + +### About the team + +### Contact diff --git a/content/projects/test.mdx b/content/projects/openepd.mdx similarity index 90% rename from content/projects/test.mdx rename to content/projects/openepd.mdx index f8eeaee..d2c2dfb 100644 --- a/content/projects/test.mdx +++ b/content/projects/openepd.mdx @@ -1,5 +1,5 @@ --- -title: Example project +title: OPENEPD by C-Change Labs links: - url: https://example.com label: Website From 0b830de8b353fb2fa609cc9abca73b5932948012 Mon Sep 17 00:00:00 2001 From: karim-daw Date: Tue, 11 Jun 2024 23:07:09 +0100 Subject: [PATCH 7/7] docs --- app/(single-page)/[pageType]/[slug]/page.tsx | 30 ++++++++------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/app/(single-page)/[pageType]/[slug]/page.tsx b/app/(single-page)/[pageType]/[slug]/page.tsx index 4deff9e..32d8abb 100644 --- a/app/(single-page)/[pageType]/[slug]/page.tsx +++ b/app/(single-page)/[pageType]/[slug]/page.tsx @@ -8,24 +8,10 @@ type SinglePageType = { slug: string; }; -type PageProps = { - page: { - metadata: { - title: string; - description?: string; - event?: object; - project?: object; - links?: { - url: string; - label: string; - }[]; - directMdLink?: string; - }; - slug: string; - content: string; - }; -}; - +/* + * This function fetches the markdown content from a given URL and returns it as a string. + * It also cleans the content by removing any HTML tags. + */ async function fetchMarkdownContent(url: string): Promise { const response = await fetch(url); if (!response.ok) { @@ -38,11 +24,18 @@ async function fetchMarkdownContent(url: string): Promise { return content; } +/* + * This function removes HTML tags from a given markdown content. + */ function cleanMarkdownContent(content: string): string { // Use a regex to remove problematic HTML tags return content.replace(/<[^>]*>/g, ""); } +/* + * This function fetches the page data for a given page type and slug. + * It also fetches the markdown content if the page has a directMdLink. + */ async function fetchPageData(pageType: PageType, slug: string) { let page = getPosts(pageType).find((page) => page.slug === slug); @@ -50,6 +43,7 @@ async function fetchPageData(pageType: PageType, slug: string) { return null; } + // Fetch the markdown content if the page has a directMdLink if (page.metadata.directMdLink) { try { console.log(