Skip to content

Commit 4285b14

Browse files
authored
Refactor/143 그림일기 상태 저장 및 ai 크게보기 수정 (#155)
* [feat] 다른 페이지 다녀와도 그림 상태 유지 * [feat] ai 그림 선택 시, 해당 키워드의 캔버스에 그려진 그림 삭제 * [feat] 크게 보기 선택 시, 크게 보이도록 수정
1 parent f20ed7c commit 4285b14

File tree

5 files changed

+30
-1
lines changed

5 files changed

+30
-1
lines changed

src/components/helpWithAi/chat/ImageBlock.jsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ const SuggestImage = ({ imageSrc }) => {
2929
preview={{
3030
mask: <span className={"text-xl font-bold"}>크게 보기</span>,
3131
toolbarRender: () => {},
32+
imageRender: (_, { image }) => (
33+
<img
34+
className={"scale-150 tablet:scale-[2]"}
35+
src={image.url}
36+
alt=""
37+
/>
38+
),
3239
}}
3340
className={"object-cover"}
3441
rootClassName={"block"}

src/hooks/canvas/useDrawEvents.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { useDrawStateStore } from "../../stores/DrawState";
33
import { useDrawingToolStore } from "../../stores/DrawingToolStore";
44

55
export const useDrawEvents = (canvasRef, keyword) => {
6-
const { setDrawState } = useDrawStateStore();
6+
const { setDrawState, drawState } = useDrawStateStore();
77
const { drawingTools } = useDrawingToolStore();
88

99
const { brushSize, color, drawingMode } = drawingTools;
@@ -21,6 +21,11 @@ export const useDrawEvents = (canvasRef, keyword) => {
2121
setContext(ctx);
2222
}, 0);
2323
}
24+
if (drawState[keyword]) {
25+
const canvas = canvasRef.current;
26+
const ctx = canvas.getContext("2d");
27+
ctx.putImageData(drawState[keyword].canvasState, 0, 0);
28+
}
2429
}, [canvasRef]);
2530

2631
// 색과 두께 변경 시 마다 호출

src/hooks/canvas/useResetCanvas.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
import { useEffect } from "react";
22
import { useAiImageStore } from "../../stores/AiImagesStore";
33
import { useKeywordStore } from "../../stores/KeywordStore";
4+
import { useDrawStateStore } from "../../stores/DrawState";
45
const useResetCanvas = () => {
56
const { resetAiImages } = useAiImageStore();
67
const { resetSelectedKeyword } = useKeywordStore();
8+
const { resetCanvasState } = useDrawStateStore();
79

810
useEffect(() => {
11+
resetCanvasState();
912
resetAiImages();
1013
resetSelectedKeyword();
1114
}, []);

src/pages/draws/ControlPhotoOpacity.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { AiProfile } from "../../components/helpWithAi/chat/Chat";
44
import { useAiImageStore } from "../../stores/AiImagesStore";
55
import { useKeywordStore } from "../../stores/KeywordStore";
66
import { useNavigate } from "react-router-dom";
7+
import { useDrawStateStore } from "../../stores/DrawState";
78
import useGoDiaryDraw from "../../hooks/canvas/useGoDiaryDraw";
89

910
export const CONTROL_PHOTO_OPACITY_PAGE_PATH = "/diary/draw/ai/edit";
@@ -97,6 +98,7 @@ const Buttons = ({ selectedOpacity }) => {
9798

9899
const { AiImages, setAiImages, removeAiImage } = useAiImageStore();
99100
const { goDiaryDraw } = useGoDiaryDraw();
101+
const { resetOneCavnasState } = useDrawStateStore();
100102

101103
const handleClickCancelButton = () => {
102104
removeAiImage(selectedKeyword.keywordId);
@@ -108,6 +110,7 @@ const Buttons = ({ selectedOpacity }) => {
108110
AiImages[selectedKeyword.keywordId].imageUrl,
109111
OPACITY_BUTTON[selectedOpacity].value
110112
);
113+
resetOneCavnasState(selectedKeyword.keywordId);
111114
goDiaryDraw();
112115
};
113116
return (

src/stores/DrawState.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,4 +119,15 @@ export const useDrawStateStore = create((set) => ({
119119
};
120120
});
121121
},
122+
123+
resetCanvasState: () => {
124+
set({ drawState: {} });
125+
},
126+
127+
resetOneCavnasState: (keyword) => {
128+
set((state) => {
129+
const { [keyword]: _, ...newDrawState } = state.drawState; // keyword를 제외한 나머지 속성으로 새로운 객체를 생성합니다.
130+
return { drawState: newDrawState };
131+
});
132+
},
122133
}));

0 commit comments

Comments
 (0)