From f6ad49754a4b4dcb14d099faf5ca8c009ecf3bf3 Mon Sep 17 00:00:00 2001 From: Steven Date: Fri, 7 Feb 2025 20:51:04 +0800 Subject: [PATCH] chore: update url of memo detail page --- web/src/components/Inbox/MemoCommentMessage.tsx | 3 +-- web/src/components/MemoActionMenu.tsx | 5 ++--- .../MemoContent/EmbeddedContent/EmbeddedMemo.tsx | 3 +-- .../MemoContent/ReferencedContent/ReferencedMemo.tsx | 3 +-- .../MemoRelationForceGraph/MemoRelationForceGraph.tsx | 3 +-- web/src/components/MemoView.tsx | 8 ++++---- web/src/pages/MemoDetail.tsx | 3 +-- web/src/router/MemoDetailRedirect.tsx | 8 ++++++++ web/src/router/index.tsx | 8 +++++++- web/src/utils/memo.ts | 3 --- 10 files changed, 26 insertions(+), 21 deletions(-) create mode 100644 web/src/router/MemoDetailRedirect.tsx diff --git a/web/src/components/Inbox/MemoCommentMessage.tsx b/web/src/components/Inbox/MemoCommentMessage.tsx index 543c941276d5f..d9d3eaabee188 100644 --- a/web/src/components/Inbox/MemoCommentMessage.tsx +++ b/web/src/components/Inbox/MemoCommentMessage.tsx @@ -11,7 +11,6 @@ import { Memo } from "@/types/proto/api/v1/memo_service"; import { User } from "@/types/proto/api/v1/user_service"; import { cn } from "@/utils"; import { useTranslate } from "@/utils/i18n"; -import { memoLink } from "@/utils/memo"; interface Props { inbox: Inbox; @@ -52,7 +51,7 @@ const MemoCommentMessage = ({ inbox }: Props) => { return; } - navigateTo(memoLink(relatedMemo.name)); + navigateTo(`/${relatedMemo.name}`); if (inbox.status === Inbox_Status.UNREAD) { handleArchiveMessage(true); } diff --git a/web/src/components/MemoActionMenu.tsx b/web/src/components/MemoActionMenu.tsx index affb83341d214..e04f70b870678 100644 --- a/web/src/components/MemoActionMenu.tsx +++ b/web/src/components/MemoActionMenu.tsx @@ -21,7 +21,6 @@ import { NodeType } from "@/types/proto/api/v1/markdown_service"; import { Memo } from "@/types/proto/api/v1/memo_service"; import { cn } from "@/utils"; import { useTranslate } from "@/utils/i18n"; -import { memoLink } from "@/utils/memo"; interface Props { memo: Memo; @@ -52,7 +51,7 @@ const MemoActionMenu = (props: Props) => { const userStatsStore = useUserStatsStore(); const isArchived = memo.state === State.ARCHIVED; const hasCompletedTaskList = checkHasCompletedTaskList(memo); - const isInMemoDetailPage = location.pathname.startsWith(memoLink(memo.name)); + const isInMemoDetailPage = location.pathname.startsWith(`/${memo.name}`); const memoUpdatedCallback = () => { // Refresh user stats. @@ -115,7 +114,7 @@ const MemoActionMenu = (props: Props) => { }; const handleCopyLink = () => { - copy(`${window.location.origin}${memoLink(memo.name)}`); + copy(`${window.location.origin}/${memo.name}`); toast.success(t("message.succeed-copy-link")); }; diff --git a/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx b/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx index 4462ef5cc51cf..b0caf3ce1688d 100644 --- a/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx +++ b/web/src/components/MemoContent/EmbeddedContent/EmbeddedMemo.tsx @@ -7,7 +7,6 @@ import MemoResourceListView from "@/components/MemoResourceListView"; import useLoading from "@/hooks/useLoading"; import { extractMemoIdFromName, useMemoStore } from "@/store/v1"; import { cn } from "@/utils"; -import { memoLink } from "@/utils/memo"; import MemoContent from ".."; import { RendererContext } from "../types"; import Error from "./Error"; @@ -79,7 +78,7 @@ const EmbeddedMemo = ({ resourceId: uid, params: paramsStr }: Props) => { > {extractMemoIdFromName(memo.name).slice(0, 6)} - + diff --git a/web/src/components/MemoContent/ReferencedContent/ReferencedMemo.tsx b/web/src/components/MemoContent/ReferencedContent/ReferencedMemo.tsx index 5f59288b31b92..565e0d20f752b 100644 --- a/web/src/components/MemoContent/ReferencedContent/ReferencedMemo.tsx +++ b/web/src/components/MemoContent/ReferencedContent/ReferencedMemo.tsx @@ -2,7 +2,6 @@ import { useContext, useEffect } from "react"; import useLoading from "@/hooks/useLoading"; import useNavigateTo from "@/hooks/useNavigateTo"; import { memoNamePrefix, useMemoStore } from "@/store/v1"; -import { memoLink } from "@/utils/memo"; import { RendererContext } from "../types"; import Error from "./Error"; @@ -35,7 +34,7 @@ const ReferencedMemo = ({ resourceId: uid, params: paramsStr }: Props) => { const displayContent = paramsText || (memo.snippet.length > 12 ? `${memo.snippet.slice(0, 12)}...` : memo.snippet); const handleGotoMemoDetailPage = () => { - navigateTo(memoLink(memo.name), { + navigateTo(`/${memo.name}`, { state: { from: context.parentPage, }, diff --git a/web/src/components/MemoRelationForceGraph/MemoRelationForceGraph.tsx b/web/src/components/MemoRelationForceGraph/MemoRelationForceGraph.tsx index 96f7b3b25cd50..73592dd6618ec 100644 --- a/web/src/components/MemoRelationForceGraph/MemoRelationForceGraph.tsx +++ b/web/src/components/MemoRelationForceGraph/MemoRelationForceGraph.tsx @@ -5,7 +5,6 @@ import useNavigateTo from "@/hooks/useNavigateTo"; import { MemoRelation_Type } from "@/types/proto/api/v1/memo_relation_service"; import { Memo } from "@/types/proto/api/v1/memo_service"; import { cn } from "@/utils"; -import { memoLink } from "@/utils/memo"; import { LinkType, NodeType } from "./types"; import { convertMemoRelationsToGraphData } from "./utils"; @@ -32,7 +31,7 @@ const MemoRelationForceGraph = ({ className, memo, parentPage }: Props) => { const onNodeClick = (node: NodeObject) => { if (node.memo.name === memo.name) return; - navigateTo(memoLink(memo.name), { + navigateTo(`/${memo.name}`, { state: { from: parentPage, }, diff --git a/web/src/components/MemoView.tsx b/web/src/components/MemoView.tsx index d2659ee79d17b..c75831852a857 100644 --- a/web/src/components/MemoView.tsx +++ b/web/src/components/MemoView.tsx @@ -13,7 +13,7 @@ import { WorkspaceMemoRelatedSetting } from "@/types/proto/api/v1/workspace_sett import { WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { cn } from "@/utils"; import { useTranslate } from "@/utils/i18n"; -import { convertVisibilityToString, memoLink } from "@/utils/memo"; +import { convertVisibilityToString } from "@/utils/memo"; import { isSuperUser } from "@/utils/user"; import MemoActionMenu from "./MemoActionMenu"; import MemoContent from "./MemoContent"; @@ -61,7 +61,7 @@ const MemoView: React.FC = (props: Props) => { const relativeTimeFormat = Date.now() - memo.displayTime!.getTime() > 1000 * 60 * 60 * 24 ? "datetime" : "auto"; const isArchived = memo.state === State.ARCHIVED; const readonly = memo.creator !== user?.name && !isSuperUser(user); - const isInMemoDetailPage = location.pathname.startsWith(memoLink(memo.name)); + const isInMemoDetailPage = location.pathname.startsWith(`/${memo.name}`); const parentPage = props.parentPage || location.pathname; // Initial related data: creator. @@ -71,7 +71,7 @@ const MemoView: React.FC = (props: Props) => { }, []); const handleGotoMemoDetailPage = useCallback(() => { - navigateTo(memoLink(memo.name), { + navigateTo(`/${memo.name}`, { state: { from: parentPage, }, @@ -192,7 +192,7 @@ const MemoView: React.FC = (props: Props) => { "flex flex-row justify-start items-center hover:opacity-70", commentAmount === 0 && "invisible group-hover:visible", )} - to={`${memoLink(memo.name)}#comments`} + to={`/${memo.name}#comments`} viewTransition state={{ from: parentPage, diff --git a/web/src/pages/MemoDetail.tsx b/web/src/pages/MemoDetail.tsx index 7bd43a924a245..d7d4cff0351b7 100644 --- a/web/src/pages/MemoDetail.tsx +++ b/web/src/pages/MemoDetail.tsx @@ -17,7 +17,6 @@ import { Memo } from "@/types/proto/api/v1/memo_service"; import { WorkspaceMemoRelatedSetting, WorkspaceSettingKey } from "@/types/proto/store/workspace_setting"; import { cn } from "@/utils"; import { useTranslate } from "@/utils/i18n"; -import { memoLink } from "@/utils/memo"; const MemoDetail = () => { const t = useTranslate(); @@ -98,7 +97,7 @@ const MemoDetail = () => {
diff --git a/web/src/router/MemoDetailRedirect.tsx b/web/src/router/MemoDetailRedirect.tsx new file mode 100644 index 0000000000000..2b89907c28efd --- /dev/null +++ b/web/src/router/MemoDetailRedirect.tsx @@ -0,0 +1,8 @@ +import { Navigate, useParams } from "react-router-dom"; + +const MemoDetailRedirect = () => { + const { uid } = useParams(); + return ; +}; + +export default MemoDetailRedirect; diff --git a/web/src/router/index.tsx b/web/src/router/index.tsx index 6be39e6bcb60c..e4fdcae5b2ca8 100644 --- a/web/src/router/index.tsx +++ b/web/src/router/index.tsx @@ -17,6 +17,7 @@ import Setting from "@/pages/Setting"; import SignIn from "@/pages/SignIn"; import SignUp from "@/pages/SignUp"; import UserProfile from "@/pages/UserProfile"; +import MemoDetailRedirect from "./MemoDetailRedirect"; export enum Routes { ROOT = "/", @@ -85,7 +86,7 @@ const router = createBrowserRouter([ element: , }, { - path: "m/:uid", + path: "memos/:uid", element: , }, { @@ -96,6 +97,11 @@ const router = createBrowserRouter([ path: Routes.ABOUT, element: , }, + // Redirect old path to new path. + { + path: "m/:uid", + element: , + }, { path: "403", element: , diff --git a/web/src/utils/memo.ts b/web/src/utils/memo.ts index 950023af7ad09..fc944e3307e82 100644 --- a/web/src/utils/memo.ts +++ b/web/src/utils/memo.ts @@ -1,4 +1,3 @@ -import { extractMemoIdFromName } from "@/store/v1"; import { Visibility } from "@/types/proto/api/v1/memo_service"; export const convertVisibilityFromString = (visibility: string) => { @@ -26,5 +25,3 @@ export const convertVisibilityToString = (visibility: Visibility) => { return "PRIVATE"; } }; - -export const memoLink = (memo: string) => `/m/${extractMemoIdFromName(memo)}`;