import { IMAGE_URL_REG } from "../helpers/consts"; import * as utils from "../helpers/utils"; import useToggle from "../hooks/useToggle"; import { memoService } from "../services"; import { formatMemoContent } from "../helpers/marked"; import Only from "./common/OnlyWhen"; import Image from "./Image"; import toastHelper from "./Toast"; import "../less/memo.less"; interface Props { memo: Memo; } const ArchivedMemo: React.FC = (props: Props) => { const { memo: propsMemo } = props; const memo = { ...propsMemo, createdAtStr: utils.getDateTimeString(propsMemo.createdTs), archivedAtStr: utils.getDateTimeString(propsMemo.updatedTs ?? Date.now()), }; const [showConfirmDeleteBtn, toggleConfirmDeleteBtn] = useToggle(false); const imageUrls = Array.from(memo.content.match(IMAGE_URL_REG) ?? []).map((s) => s.replace(IMAGE_URL_REG, "$1")); const handleDeleteMemoClick = async () => { if (showConfirmDeleteBtn) { try { await memoService.deleteMemoById(memo.id); await memoService.fetchAllMemos(); } catch (error: any) { toastHelper.error(error.message); } } else { toggleConfirmDeleteBtn(); } }; const handleRestoreMemoClick = async () => { try { await memoService.patchMemo({ id: memo.id, rowStatus: "NORMAL", }); await memoService.fetchAllMemos(); toastHelper.info("Restored successfully"); } catch (error: any) { toastHelper.error(error.message); } }; const handleMouseLeaveMemoWrapper = () => { if (showConfirmDeleteBtn) { toggleConfirmDeleteBtn(false); } }; return (
Archived at {memo.archivedAtStr}
Restore {showConfirmDeleteBtn ? "Delete!" : "Delete"}
0}>
{imageUrls.map((imgUrl, idx) => ( ))}
); }; export default ArchivedMemo;