import { Tooltip } from "@mui/joy"; import { memo, useEffect, useState } from "react"; import { Link } from "react-router-dom"; import { MemoNamePrefix, extractMemoIdFromName, useMemoStore } from "@/store/v1"; import { MemoRelation } from "@/types/proto/api/v2/memo_relation_service"; import { Memo } from "@/types/proto/api/v2/memo_service"; import Icon from "./Icon"; interface Props { memo: Memo; relations: MemoRelation[]; } const MemoRelationListView = (props: Props) => { const { memo, relations: relationList } = props; const memoStore = useMemoStore(); const [referencingMemoList, setReferencingMemoList] = useState([]); const [referencedMemoList, setReferencedMemoList] = useState([]); useEffect(() => { (async () => { const referencingMemoList = await Promise.all( relationList .filter( (relation) => relation.memoId === extractMemoIdFromName(memo.name) && relation.relatedMemoId !== extractMemoIdFromName(memo.name), ) .map((relation) => memoStore.getOrFetchMemoByName(`${MemoNamePrefix}${relation.relatedMemoId}`, { skipStore: true })), ); setReferencingMemoList(referencingMemoList); const referencedMemoList = await Promise.all( relationList .filter( (relation) => relation.memoId !== extractMemoIdFromName(memo.name) && relation.relatedMemoId === extractMemoIdFromName(memo.name), ) .map((relation) => memoStore.getOrFetchMemoByName(`${MemoNamePrefix}${relation.memoId}`, { skipStore: true })), ); setReferencedMemoList(referencedMemoList); })(); }, [memo, relationList]); return ( <> {referencingMemoList.length > 0 && (
{referencingMemoList.map((memo) => { return (
{memo.content}
); })}
)} {referencedMemoList.length > 0 && (
{referencedMemoList.map((memo) => { return (
{memo.content}
); })}
)} ); }; export default memo(MemoRelationListView);