mirror of
https://github.com/usememos/memos.git
synced 2025-06-05 22:09:59 +02:00
* refactor: add bi-directional filters sync between filterStore and searchParams * fix: tag redirection from memos detail page, https://github.com/usememos/memos/issues/4232
54 lines
1.5 KiB
TypeScript
54 lines
1.5 KiB
TypeScript
import { useContext, useEffect } from "react";
|
|
import useLoading from "@/hooks/useLoading";
|
|
import useNavigateTo from "@/hooks/useNavigateTo";
|
|
import { useMemoStore } from "@/store/v1";
|
|
import { RendererContext } from "../types";
|
|
import Error from "./Error";
|
|
|
|
interface Props {
|
|
resourceId: string;
|
|
params: string;
|
|
}
|
|
|
|
const ReferencedMemo = ({ resourceId: uid, params: paramsStr }: Props) => {
|
|
const navigateTo = useNavigateTo();
|
|
const loadingState = useLoading();
|
|
const memoStore = useMemoStore();
|
|
const memo = memoStore.getMemoByUid(uid);
|
|
const params = new URLSearchParams(paramsStr);
|
|
const context = useContext(RendererContext);
|
|
|
|
useEffect(() => {
|
|
memoStore.fetchMemoByUid(uid).finally(() => loadingState.setFinish());
|
|
}, [uid]);
|
|
|
|
if (loadingState.isLoading) {
|
|
return null;
|
|
}
|
|
if (!memo) {
|
|
return <Error message={`Memo not found: ${uid}`} />;
|
|
}
|
|
|
|
const paramsText = params.has("text") ? params.get("text") : undefined;
|
|
const displayContent = paramsText || (memo.snippet.length > 12 ? `${memo.snippet.slice(0, 12)}...` : memo.snippet);
|
|
|
|
const handleGotoMemoDetailPage = () => {
|
|
navigateTo(`/m/${memo.uid}`, {
|
|
state: {
|
|
from: context.parentPage,
|
|
},
|
|
});
|
|
};
|
|
|
|
return (
|
|
<span
|
|
className="text-blue-600 whitespace-nowrap dark:text-blue-400 cursor-pointer underline break-all hover:opacity-80 decoration-1"
|
|
onClick={handleGotoMemoDetailPage}
|
|
>
|
|
{displayContent}
|
|
</span>
|
|
);
|
|
};
|
|
|
|
export default ReferencedMemo;
|