Skip to content

Commit e817d39

Browse files
committed
feat: 리뷰 생성 데이터 전역 store 관리 추가
1 parent feb2290 commit e817d39

File tree

9 files changed

+134
-6
lines changed

9 files changed

+134
-6
lines changed

.eslintrc.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,11 @@
6262
"group": "type",
6363
"position": "before"
6464
},
65+
{
66+
"pattern": "@/store/**/*",
67+
"group": "type",
68+
"position": "before"
69+
},
6570
{
6671
"pattern": "@/styles/**/*",
6772
"group": "type",

.pnp.cjs

Lines changed: 34 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
95.8 KB
Binary file not shown.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@
2323
"classnames": "^2.5.1",
2424
"react": "^18.3.1",
2525
"react-dom": "^18.3.1",
26-
"react-router-dom": "^7.1.3"
26+
"react-router-dom": "^7.1.3",
27+
"zustand": "^5.0.3"
2728
},
2829
"devDependencies": {
2930
"@commitlint/cli": "^19.6.1",

src/components/ReceiptEdit/ReceiptEdit.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,13 @@ import Text from "@/components/ui/Text/Text";
88
import { useFocus } from "@/hooks/common/useFocus";
99
import { useRoute } from "@/hooks/common/useRoute";
1010

11+
import { useCreateReviewStore } from "@/store/useReviewStore";
12+
1113
const ReceiptEdit = () => {
1214
const { navigateToSelectTag } = useRoute();
1315

16+
const { setOcrText } = useCreateReviewStore();
17+
1418
const [placeName, setPlaceName] = useState("청담커피 앤 토스트");
1519
const [foodName, setFoodName] = useState("카야토스트+음료세트");
1620

@@ -21,6 +25,13 @@ const ReceiptEdit = () => {
2125
} = useFocus({});
2226
const { isFocus: isFoodFocus, onFocus: handleFoodFocus, onBlur: handleFoodBlur } = useFocus({});
2327

28+
const handleInfoRightClick = () => {
29+
const ocrText = `${placeName} ${foodName}`;
30+
setOcrText(ocrText);
31+
32+
navigateToSelectTag();
33+
};
34+
2435
return (
2536
<div className={styles.ReceiptEdit}>
2637
<div className={styles.Top}>
@@ -75,7 +86,7 @@ const ReceiptEdit = () => {
7586
<Button
7687
text="정보가 맞아요"
7788
disabled={!placeName || !foodName}
78-
onClick={navigateToSelectTag}
89+
onClick={handleInfoRightClick}
7990
/>
8091
</>
8192
)}

src/components/SelectStyle/SelectStyle.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import Text from "@/components/ui/Text/Text";
99

1010
import { useRoute } from "@/hooks/common/useRoute";
1111

12+
import { useCreateReviewStore } from "@/store/useReviewStore";
13+
1214
interface StyleProps {
1315
name: string;
1416
image: string;
@@ -24,12 +26,22 @@ const IMG_STYLE_DATA = [
2426
const SelectStyle = () => {
2527
const { navigateToReviewResult } = useRoute();
2628

29+
const { setReviewStyle } = useCreateReviewStore();
30+
2731
const [selectedStyle, setSelectedStyle] = useState(IMG_STYLE_DATA[0]);
2832

2933
const handleStyleClick = (style: StyleProps) => {
3034
setSelectedStyle((prevStyle) => (prevStyle.name === style.name ? IMG_STYLE_DATA[0] : style));
3135
};
3236

37+
const handleCreateReview = () => {
38+
if (selectedStyle.name !== "default") {
39+
setReviewStyle(selectedStyle.name);
40+
}
41+
42+
navigateToReviewResult();
43+
};
44+
3345
return (
3446
<div className={styles.SelectStyle}>
3547
<div className={styles.Title}>
@@ -63,7 +75,7 @@ const SelectStyle = () => {
6375
</div>
6476

6577
<div className={styles.Bottom}>
66-
<Button text="리뷰 만들기" onClick={navigateToReviewResult} />
78+
<Button text="리뷰 만들기" onClick={handleCreateReview} />
6779
</div>
6880
</div>
6981
);

src/components/SelectTag/SelectTag.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import Text from "@/components/ui/Text/Text";
88

99
import { useRoute } from "@/hooks/common/useRoute";
1010

11+
import { useCreateReviewStore } from "@/store/useReviewStore";
12+
1113
// 임시 데이터
1214
const TAG_LIST = [
1315
"음식이 맛있어요",
@@ -26,6 +28,8 @@ const TAG_LIST = [
2628
const SelectTag = () => {
2729
const { navigateToSelectStyle } = useRoute();
2830

31+
const { setHashTag } = useCreateReviewStore();
32+
2933
const [selectedTagList, setSelectedTagList] = useState<string[]>([]);
3034
const [isBottomSheetOpen, setIsBottomSheetOpen] = useState(false);
3135

@@ -43,6 +47,11 @@ const SelectTag = () => {
4347
setIsBottomSheetOpen(false);
4448
};
4549

50+
const handleNextClick = () => {
51+
setHashTag(selectedTagList);
52+
navigateToSelectStyle();
53+
};
54+
4655
return (
4756
<div className={styles.SelectTag}>
4857
<div className={styles.Top}>
@@ -68,7 +77,7 @@ const SelectTag = () => {
6877
</div>
6978

7079
<div className={styles.Bottom}>
71-
<Button text="다음" onClick={navigateToSelectStyle} />
80+
<Button text="다음" onClick={handleNextClick} />
7281
</div>
7382

7483
<TagSheet isOpen={isBottomSheetOpen} handleClose={handleSheetClose} />

src/store/useReviewStore.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { create } from "zustand";
2+
3+
interface CreateReviewData {
4+
ocrText: string;
5+
hashTag: string[];
6+
reviewStyle: string;
7+
}
8+
9+
interface CreateReviewDataStore {
10+
createReviewData: CreateReviewData;
11+
setOcrText: (ocrText: string) => void;
12+
setHashTag: (hashTag: string[]) => void;
13+
setReviewStyle: (reviewStyle: string) => void;
14+
}
15+
16+
export const CREATE_REVIEW_DATA = {
17+
ocrText: "",
18+
hashTag: [],
19+
reviewStyle: "",
20+
};
21+
22+
export const useCreateReviewStore = create<CreateReviewDataStore>((set) => ({
23+
createReviewData: { ...CREATE_REVIEW_DATA },
24+
setOcrText: (ocrText: string) =>
25+
set((state) => ({
26+
createReviewData: { ...state.createReviewData, ocrText },
27+
})),
28+
setHashTag: (hashTag: string[]) =>
29+
set((state) => ({
30+
createReviewData: { ...state.createReviewData, hashTag },
31+
})),
32+
setReviewStyle: (reviewStyle: string) =>
33+
set((state) => ({
34+
createReviewData: { ...state.createReviewData, reviewStyle },
35+
})),
36+
}));

yarn.lock

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8165,6 +8165,7 @@ __metadata:
81658165
vite: "npm:^6.0.5"
81668166
vite-plugin-svgr: "npm:^4.3.0"
81678167
vite-tsconfig-paths: "npm:^5.1.4"
8168+
zustand: "npm:^5.0.3"
81688169
languageName: unknown
81698170
linkType: soft
81708171

@@ -11216,3 +11217,24 @@ __metadata:
1121611217
checksum: 10c0/cb287fe5e6acfa82690acb43c283de34e945c571a78a939774f6eaba7c285bacdf6c90fbc16ce530060863984c906d2b4c6ceb069c94d1e0a06d5f2b458e2a92
1121711218
languageName: node
1121811219
linkType: hard
11220+
11221+
"zustand@npm:^5.0.3":
11222+
version: 5.0.3
11223+
resolution: "zustand@npm:5.0.3"
11224+
peerDependencies:
11225+
"@types/react": ">=18.0.0"
11226+
immer: ">=9.0.6"
11227+
react: ">=18.0.0"
11228+
use-sync-external-store: ">=1.2.0"
11229+
peerDependenciesMeta:
11230+
"@types/react":
11231+
optional: true
11232+
immer:
11233+
optional: true
11234+
react:
11235+
optional: true
11236+
use-sync-external-store:
11237+
optional: true
11238+
checksum: 10c0/dad96c6c123fda088c583d5df6692e9245cd207583078dc15f93d255a67b0f346bad4535545c98852ecde93d254812a0c799579dfde2ab595016b99fbe20e4d5
11239+
languageName: node
11240+
linkType: hard

0 commit comments

Comments
 (0)