chore: update referenced memo title from params

This commit is contained in:
Steven 2024-01-23 21:54:15 +08:00
parent fdb1779a59
commit 3dbb254aeb

View File

@ -1,8 +1,7 @@
import { useContext, useEffect } from "react"; import { useEffect } from "react";
import useLoading from "@/hooks/useLoading"; import useLoading from "@/hooks/useLoading";
import useNavigateTo from "@/hooks/useNavigateTo"; import useNavigateTo from "@/hooks/useNavigateTo";
import { useMemoStore } from "@/store/v1"; import { useMemoStore } from "@/store/v1";
import { RendererContext } from "../types";
import Error from "./Error"; import Error from "./Error";
interface Props { interface Props {
@ -10,13 +9,12 @@ interface Props {
params: string; params: string;
} }
const ReferencedMemo = ({ resourceId }: Props) => { const ReferencedMemo = ({ resourceId, params: paramsStr }: Props) => {
const context = useContext(RendererContext);
const navigateTo = useNavigateTo(); const navigateTo = useNavigateTo();
const loadingState = useLoading(); const loadingState = useLoading();
const memoStore = useMemoStore(); const memoStore = useMemoStore();
const memo = memoStore.getMemoByName(resourceId); const memo = memoStore.getMemoByName(resourceId);
const resourceName = `memos/${resourceId}`; const params = new URLSearchParams(paramsStr);
useEffect(() => { useEffect(() => {
memoStore.getOrFetchMemoByName(resourceId).finally(() => loadingState.setFinish()); memoStore.getOrFetchMemoByName(resourceId).finally(() => loadingState.setFinish());
@ -28,18 +26,14 @@ const ReferencedMemo = ({ resourceId }: Props) => {
if (!memo) { if (!memo) {
return <Error message={`Memo not found: ${resourceId}`} />; return <Error message={`Memo not found: ${resourceId}`} />;
} }
if (memo.id === context.memoId || context.embeddedMemos.has(resourceName)) {
return <Error message={`Nested Rendering Error: ![[${resourceName}]]`} />;
}
const displayContent = memo.content.length > 12 ? `${memo.content.slice(0, 12)}...` : memo.content; const paramsText = params.has("text") ? params.get("text") : undefined;
const displayContent = paramsText || (memo.content.length > 12 ? `${memo.content.slice(0, 12)}...` : memo.content);
const handleGotoMemoDetailPage = () => { const handleGotoMemoDetailPage = () => {
navigateTo(`/m/${memo.name}`); navigateTo(`/m/${memo.name}`);
}; };
// Add the memo to the set of embedded memos. This is used to prevent infinite loops when a memo embeds itself.
context.embeddedMemos.add(resourceName);
return ( return (
<span <span
className="text-blue-600 whitespace-nowrap dark:text-blue-400 cursor-pointer underline break-all hover:opacity-80 decoration-1" className="text-blue-600 whitespace-nowrap dark:text-blue-400 cursor-pointer underline break-all hover:opacity-80 decoration-1"