From e53fb58fa119329d913b72be2f6c2096c3d810c1 Mon Sep 17 00:00:00 2001 From: SeeLey Wang <37832104+zizdlp@users.noreply.github.com> Date: Sun, 25 Aug 2024 12:42:02 +0800 Subject: [PATCH] update footer (#23) --- .../(repos)/o/[reponame]/[...href]/page.tsx | 103 +++++++++++------- .../[username]/(repos)/o/[reponame]/page.tsx | 49 ++++++--- .../src/components/MainContentFooter.tsx | 4 +- .../searchs/SearchMarkdownComponent.tsx | 1 - .../sidebars/RepoSideBarSettting.tsx | 1 - 5 files changed, 99 insertions(+), 59 deletions(-) diff --git a/zbook_frontend/src/app/[locale]/workspace/[username]/(repos)/o/[reponame]/[...href]/page.tsx b/zbook_frontend/src/app/[locale]/workspace/[username]/(repos)/o/[reponame]/[...href]/page.tsx index 00caacf..97f5d44 100644 --- a/zbook_frontend/src/app/[locale]/workspace/[username]/(repos)/o/[reponame]/[...href]/page.tsx +++ b/zbook_frontend/src/app/[locale]/workspace/[username]/(repos)/o/[reponame]/[...href]/page.tsx @@ -7,17 +7,55 @@ import { Metadata } from "next"; import { SearchParams } from "@/types/interface"; import { FetchError } from "@/fetchs/util"; import { logger } from "@/utils/logger"; + +async function fetchMarkdownContent({ + username, + reponame, + href, + locale, +}: { + username: string; + reponame: string; + href: string; + locale: string; +}) { + const xforward = headers().get("x-forwarded-for") ?? ""; + const agent = headers().get("User-Agent") ?? ""; + const response = await fetchServerWithAuthWrapper({ + endpoint: FetchServerWithAuthWrapperEndPoint.GET_MARKDOWN_CONTENT, + xforward, + agent, + tags: [], + values: { + username, + repo_name: decodeURIComponent(reponame), + relative_path: decodeURIComponent(href).replace(/,/g, "/"), + lang: locale || "en", + }, + }); + + if (response.error) { + throw new FetchError(response.message, response.status); + } + return response; +} + +function parseMarkdownList(markdownList: string): string[] { + const reg = /href="#(.*?)"/g; + const matches = markdownList.match(reg); + return matches ? matches.map((val) => val.slice(7, -1)) : []; +} + export async function generateMetadata({ params, }: { params: { href: string; username: string; reponame: string }; }): Promise { - var url = decodeURIComponent(params.href); // 将 params.href 转换为字符串 - var parts = url.split(","); - var lastPart = parts[parts.length - 1]; - var firstPart = parts[0] ?? ""; + const url = decodeURIComponent(params.href); + const parts = url.split(","); + const [firstPart, lastPart] = [parts[0] ?? "", parts[parts.length - 1]]; return { - title: parts.length > 1 ? firstPart + ": " + lastPart : lastPart, + title: parts.length > 1 ? `${firstPart}: ${lastPart}` : lastPart, }; } @@ -30,56 +68,38 @@ export default async function MarkdownPage({ }) { try { const currentPage = Number(searchParams?.page) || 1; + const { username, reponame, href, locale } = params; // const delay = Math.floor(Math.random() * 4000) + 1400; // await new Promise((resolve) => setTimeout(resolve, delay)); - const xforward = headers().get("x-forwarded-for") ?? ""; - const agent = headers().get("User-Agent") ?? ""; - const data = await fetchServerWithAuthWrapper({ - endpoint: FetchServerWithAuthWrapperEndPoint.GET_MARKDOWN_CONTENT, - xforward: xforward, - agent: agent, - tags: [], - values: { - username: params.username, - repo_name: decodeURIComponent(params.reponame), - relative_path: decodeURIComponent(params.href).split(",").join("/"), - lang: params.locale == "" ? "en" : params.locale, - }, + const data = await fetchMarkdownContent({ + username, + reponame, + href, + locale, }); - if (data.error) { - throw new FetchError(data.message, data.status); - } const { markdown, prev, next, footers, updated_at, theme_color } = data; const markdownText = markdown.main_content; const markdownID = markdown.markdown_id; - const href_seg = markdown.relative_path.split("/"); - const href = href_seg.slice(0, -1).join("/"); - let markdownList = ""; - let sectionIds: string[] = []; - - if (markdown.table_content) { - markdownList = markdown.table_content; - const reg = /href="#(.*?)"/g; - const res = markdownList.match(reg); - - if (res) { - sectionIds = res.map((value: string) => value.slice(7, -1)); - } - } + const hrefSegments = markdown.relative_path.split("/"); + const prefixPath = hrefSegments.slice(0, -1).join("/"); + const markdownList = markdown.table_content || ""; + const sectionIds = markdown.table_content + ? parseMarkdownList(markdown.table_content) + : []; return ( ); } catch (error) { - let e = error as FetchError; - logger.error(`fetch MarkdownPage failed:${e.message}`, e.status); + const fetchError = error as FetchError; + logger.error( + `Failed to fetch MarkdownPage: ${fetchError.message}`, + fetchError.status + ); return ; } } diff --git a/zbook_frontend/src/app/[locale]/workspace/[username]/(repos)/o/[reponame]/page.tsx b/zbook_frontend/src/app/[locale]/workspace/[username]/(repos)/o/[reponame]/page.tsx index fe58741..7eeefa8 100644 --- a/zbook_frontend/src/app/[locale]/workspace/[username]/(repos)/o/[reponame]/page.tsx +++ b/zbook_frontend/src/app/[locale]/workspace/[username]/(repos)/o/[reponame]/page.tsx @@ -4,33 +4,52 @@ import { fetchServerWithAuthWrapper } from "@/fetchs/server_with_auth"; import { FetchServerWithAuthWrapperEndPoint } from "@/fetchs/server_with_auth_util"; import { headers } from "next/headers"; import { FetchError } from "@/fetchs/util"; -export default async function RepoDetail({ - params: { reponame, username, locale }, -}: { - params: { reponame: string; username: string; locale: string }; -}) { - let home_page = "readme"; + +interface RepoDetailParams { + reponame: string; + username: string; + locale: string; +} + +async function fetchHomePage({ reponame, username, locale }: RepoDetailParams) { + const xforward = headers().get("x-forwarded-for") ?? ""; + const agent = headers().get("User-Agent") ?? ""; + try { - const xforward = headers().get("x-forwarded-for") ?? ""; - const agent = headers().get("User-Agent") ?? ""; const data = await fetchServerWithAuthWrapper({ endpoint: FetchServerWithAuthWrapperEndPoint.GET_FIRST_DOCUMENT, - xforward: xforward, - agent: agent, + xforward, + agent, tags: [], values: { - username: username, + username, repo_name: decodeURIComponent(reponame), - lang: locale == "" ? "en" : locale, + lang: locale || "en", }, }); - console.log("error:", data); + if (data.error) { throw new FetchError(data.message, data.status); } - home_page = data.relative_path; + + return data.relative_path; } catch (error) { + console.error("Error fetching home page:", error); + return null; + } +} + +export default async function RepoDetail({ + params, +}: { + params: RepoDetailParams; +}) { + const { reponame, username, locale } = params; + const homePage = await fetchHomePage({ reponame, username, locale }); + + if (!homePage) { return ; } - redirect(`/workspace/${username}/o/${reponame}/${home_page}`); // Navigate to the new post page + + redirect(`/workspace/${username}/o/${reponame}/${homePage}`); } diff --git a/zbook_frontend/src/components/MainContentFooter.tsx b/zbook_frontend/src/components/MainContentFooter.tsx index ac24148..77f8636 100644 --- a/zbook_frontend/src/components/MainContentFooter.tsx +++ b/zbook_frontend/src/components/MainContentFooter.tsx @@ -27,7 +27,7 @@ export default async function MainContentFooter({
{prev && (

@@ -45,7 +45,7 @@ export default async function MainContentFooter({ {next && (

diff --git a/zbook_frontend/src/components/searchs/SearchMarkdownComponent.tsx b/zbook_frontend/src/components/searchs/SearchMarkdownComponent.tsx index cf5d2bf..c7e86f2 100644 --- a/zbook_frontend/src/components/searchs/SearchMarkdownComponent.tsx +++ b/zbook_frontend/src/components/searchs/SearchMarkdownComponent.tsx @@ -33,7 +33,6 @@ export default function SearchMarkdownComponent(props: ProfileProps) {
{ - console.log("refresh page"); setSideBarReload(!sideBarReload); // refreshPage("/", true, false); }} diff --git a/zbook_frontend/src/components/sidebars/RepoSideBarSettting.tsx b/zbook_frontend/src/components/sidebars/RepoSideBarSettting.tsx index 7e75e95..a10856d 100644 --- a/zbook_frontend/src/components/sidebars/RepoSideBarSettting.tsx +++ b/zbook_frontend/src/components/sidebars/RepoSideBarSettting.tsx @@ -39,7 +39,6 @@ export default function RepoSideBarSetting({ if (matches) { page_type = matches[2] || ""; } - console.log("page_type:", page_type); } const t = useTranslations("SideBar");