diff --git a/src/components/helpWithAi/chat/ImageBlock.jsx b/src/components/helpWithAi/chat/ImageBlock.jsx index 9569ba5..029807c 100644 --- a/src/components/helpWithAi/chat/ImageBlock.jsx +++ b/src/components/helpWithAi/chat/ImageBlock.jsx @@ -29,6 +29,13 @@ const SuggestImage = ({ imageSrc }) => { preview={{ mask: 크게 보기, toolbarRender: () => {}, + imageRender: (_, { image }) => ( + + ), }} className={"object-cover"} rootClassName={"block"} diff --git a/src/hooks/canvas/useDrawEvents.js b/src/hooks/canvas/useDrawEvents.js index 24eb235..2045125 100644 --- a/src/hooks/canvas/useDrawEvents.js +++ b/src/hooks/canvas/useDrawEvents.js @@ -3,7 +3,7 @@ import { useDrawStateStore } from "../../stores/DrawState"; import { useDrawingToolStore } from "../../stores/DrawingToolStore"; export const useDrawEvents = (canvasRef, keyword) => { - const { setDrawState } = useDrawStateStore(); + const { setDrawState, drawState } = useDrawStateStore(); const { drawingTools } = useDrawingToolStore(); const { brushSize, color, drawingMode } = drawingTools; @@ -21,6 +21,11 @@ export const useDrawEvents = (canvasRef, keyword) => { setContext(ctx); }, 0); } + if (drawState[keyword]) { + const canvas = canvasRef.current; + const ctx = canvas.getContext("2d"); + ctx.putImageData(drawState[keyword].canvasState, 0, 0); + } }, [canvasRef]); // 색과 두께 변경 시 마다 호출 diff --git a/src/hooks/canvas/useResetCanvas.js b/src/hooks/canvas/useResetCanvas.js index 1ecc736..a3d15cc 100644 --- a/src/hooks/canvas/useResetCanvas.js +++ b/src/hooks/canvas/useResetCanvas.js @@ -1,11 +1,14 @@ import { useEffect } from "react"; import { useAiImageStore } from "../../stores/AiImagesStore"; import { useKeywordStore } from "../../stores/KeywordStore"; +import { useDrawStateStore } from "../../stores/DrawState"; const useResetCanvas = () => { const { resetAiImages } = useAiImageStore(); const { resetSelectedKeyword } = useKeywordStore(); + const { resetCanvasState } = useDrawStateStore(); useEffect(() => { + resetCanvasState(); resetAiImages(); resetSelectedKeyword(); }, []); diff --git a/src/pages/draws/ControlPhotoOpacity.jsx b/src/pages/draws/ControlPhotoOpacity.jsx index 734582c..97656d1 100644 --- a/src/pages/draws/ControlPhotoOpacity.jsx +++ b/src/pages/draws/ControlPhotoOpacity.jsx @@ -4,6 +4,7 @@ import { AiProfile } from "../../components/helpWithAi/chat/Chat"; import { useAiImageStore } from "../../stores/AiImagesStore"; import { useKeywordStore } from "../../stores/KeywordStore"; import { useNavigate } from "react-router-dom"; +import { useDrawStateStore } from "../../stores/DrawState"; import useGoDiaryDraw from "../../hooks/canvas/useGoDiaryDraw"; export const CONTROL_PHOTO_OPACITY_PAGE_PATH = "/diary/draw/ai/edit"; @@ -97,6 +98,7 @@ const Buttons = ({ selectedOpacity }) => { const { AiImages, setAiImages, removeAiImage } = useAiImageStore(); const { goDiaryDraw } = useGoDiaryDraw(); + const { resetOneCavnasState } = useDrawStateStore(); const handleClickCancelButton = () => { removeAiImage(selectedKeyword.keywordId); @@ -108,6 +110,7 @@ const Buttons = ({ selectedOpacity }) => { AiImages[selectedKeyword.keywordId].imageUrl, OPACITY_BUTTON[selectedOpacity].value ); + resetOneCavnasState(selectedKeyword.keywordId); goDiaryDraw(); }; return ( diff --git a/src/stores/DrawState.js b/src/stores/DrawState.js index 85a0173..9a84492 100644 --- a/src/stores/DrawState.js +++ b/src/stores/DrawState.js @@ -119,4 +119,15 @@ export const useDrawStateStore = create((set) => ({ }; }); }, + + resetCanvasState: () => { + set({ drawState: {} }); + }, + + resetOneCavnasState: (keyword) => { + set((state) => { + const { [keyword]: _, ...newDrawState } = state.drawState; // keyword를 제외한 나머지 속성으로 새로운 객체를 생성합니다. + return { drawState: newDrawState }; + }); + }, }));