import { Button, Input } from "@mui/joy"; import { isNaN, unionBy } from "lodash-es"; import React, { useState } from "react"; import { toast } from "react-hot-toast"; import { memoServiceClient } from "@/grpcweb"; import { Memo } from "@/types/proto/api/v2/memo_service"; import { useTranslate } from "@/utils/i18n"; import { generateDialog } from "./Dialog"; import Icon from "./Icon"; interface Props extends DialogProps { onCancel?: () => void; onConfirm?: (memoIdList: number[]) => void; } const CreateMemoRelationDialog: React.FC = (props: Props) => { const { destroy, onCancel, onConfirm } = props; const t = useTranslate(); const [memoId, setMemoId] = useState(""); const [memoList, setMemoList] = useState([]); const handleMemoIdInputKeyDown = (event: React.KeyboardEvent) => { if (event.key === "Enter") { handleSaveBtnClick(); } }; const handleMemoIdChanged = (event: React.ChangeEvent) => { const memoId = event.target.value; setMemoId(memoId.trim()); }; const handleSaveBtnClick = async () => { const id = Number(memoId); if (isNaN(id)) { toast.error("Invalid memo id"); return; } try { const { memo } = await memoServiceClient.getMemo({ id, }); if (!memo) { toast.error("Not found memo"); return; } setMemoId(""); setMemoList(unionBy([memo, ...memoList], "id")); } catch (error: any) { console.error(error); toast.error(error.response.data.message); } }; const handleDeleteMemoRelation = async (memo: Memo) => { setMemoList(memoList.filter((m) => m !== memo)); }; const handleCloseDialog = () => { if (onCancel) { onCancel(); } destroy(); }; const handleConfirmBtnClick = async () => { if (onConfirm) { onConfirm(memoList.map((memo) => memo.id)); } destroy(); }; return ( <>

{"Add references"}

} /> {memoList.length > 0 && ( <>
{memoList.map((memo) => (
handleDeleteMemoRelation(memo)} > #{memo.id} {memo.content}
))}
)}
); }; function showCreateMemoRelationDialog(props: Omit) { generateDialog( { className: "create-memo-relation-dialog", dialogName: "create-memo-relation-dialog", }, CreateMemoRelationDialog, props ); } export default showCreateMemoRelationDialog;