Skip to content

Commit 60898ab

Browse files
committed
refactor: 테스트 사항 삭제, 히스토리 초기화
1 parent 43e722b commit 60898ab

File tree

2 files changed

+69
-39
lines changed

2 files changed

+69
-39
lines changed

src/components/Home/Home.tsx

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import { useEffect } from "react";
33
import styles from "@/components/Home/Home.module.scss";
44
import { AppBridgeMessageType } from "@/components/provider/AppBridgeProvider/AppBridgeMessage.types";
55
import { useAppBridge } from "@/components/provider/AppBridgeProvider/AppBridgeProvider";
6+
import { WebBridgeMessageType } from "@/components/provider/WebBridgeProvider/WebBridgeProvider";
7+
import { useWebBridge } from "@/components/provider/WebBridgeProvider/WebBridgeProvider";
68
import IconButton from "@/components/ui/IconButton/IconButton";
79
import Text from "@/components/ui/Text/Text";
810

@@ -17,23 +19,34 @@ export interface ScanResult {
1719
const Home = () => {
1820
const { send } = useAppBridge();
1921

22+
const { receive } = useWebBridge();
23+
2024
const { setScanData } = useScanDataStore();
2125

2226
const { navigateToReceiptEdit } = useRoute();
2327

2428
useEffect(() => {
25-
window.response = {
26-
receiveScanResult: (jsonData: string) => {
27-
try {
28-
const data: ScanResult[] = JSON.parse(jsonData);
29-
setScanData(data);
30-
navigateToReceiptEdit();
31-
} catch (error) {
32-
console.error("Error parsing scan result JSON:", error);
33-
}
34-
},
35-
};
36-
}, []);
29+
if (typeof window !== "undefined" && !window.response) {
30+
window.response = {
31+
receiveScanResult: (jsonData: string) => {
32+
try {
33+
const data: ScanResult[] = JSON.parse(jsonData);
34+
receive({
35+
type: WebBridgeMessageType.RECEIVE_SCAN_RESULT,
36+
payload: data,
37+
});
38+
39+
setScanData(data);
40+
setTimeout(() => {
41+
navigateToReceiptEdit();
42+
}, 0);
43+
} catch (error) {
44+
console.error("Error parsing scan result JSON:", error);
45+
}
46+
},
47+
};
48+
}
49+
}, [receive, navigateToReceiptEdit, setScanData]);
3750

3851
return (
3952
<div className={styles.Home}>
@@ -57,20 +70,30 @@ const Home = () => {
5770
<IconButton
5871
text="카메라"
5972
iconName="camera"
60-
onClick={() => send({ type: AppBridgeMessageType.OPEN_CAMERA, payload: "" })}
61-
/>
62-
63-
<button
6473
onClick={() => {
65-
if (window.response) {
66-
window.response.receiveScanResult(
67-
JSON.stringify([{ sampleKey: "sampleValue" }, { sampleKey2: "sampleValue2" }]),
68-
);
74+
send({ type: AppBridgeMessageType.OPEN_CAMERA, payload: "" });
75+
if (typeof window !== "undefined" && !window.response) {
76+
window.response = {
77+
receiveScanResult: (jsonData: string) => {
78+
try {
79+
const data: ScanResult[] = JSON.parse(jsonData);
80+
receive({
81+
type: WebBridgeMessageType.RECEIVE_SCAN_RESULT,
82+
payload: data,
83+
});
84+
85+
setScanData(data);
86+
setTimeout(() => {
87+
navigateToReceiptEdit();
88+
}, 0);
89+
} catch (error) {
90+
console.error("Error parsing scan result JSON:", error);
91+
}
92+
},
93+
};
6994
}
7095
}}
71-
>
72-
테스트 데이터 전송
73-
</button>
96+
/>
7497
</div>
7598
</div>
7699
);

src/components/provider/WebBridgeProvider/WebBridgeProvider.tsx

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
import type { ReactNode } from "react";
22
import { createContext, useContext, useEffect } from "react";
33

4-
interface WebBridgeMessage {
4+
import { useScanDataStore } from "@/store/useScanDataStore";
5+
6+
export enum WebBridgeMessageType {
7+
RECEIVE_SCAN_RESULT = "receiveScanResult",
8+
}
9+
10+
type WebBridgeMessage = ScanResultMessage;
11+
12+
interface ScanResultMessage {
513
type: string;
6-
payload?: unknown;
14+
payload: { [key: string]: string }[];
715
}
816

917
interface WebBridge {
@@ -17,25 +25,24 @@ interface WebBridgeProviderProps {
1725
export const WebBridgeContext = createContext<null | WebBridge>(null);
1826

1927
export function WebBridgeProvider({ children }: WebBridgeProviderProps) {
28+
const { setScanData } = useScanDataStore();
29+
2030
const receive = (message: WebBridgeMessage) => {
21-
try {
22-
if (typeof window !== "undefined" && window.response) {
23-
if (typeof window.response.receiveScanResult === "function") {
24-
window.response.receiveScanResult(JSON.stringify(message.payload));
25-
} else {
26-
console.warn("window.response.receiveScanResult is not available.");
27-
}
28-
}
29-
} catch (error) {
30-
console.error("WebBridge API call failed:", error);
31+
if (message.type === WebBridgeMessageType.RECEIVE_SCAN_RESULT) {
32+
setScanData(message.payload || []);
3133
}
3234
};
3335

3436
useEffect(() => {
35-
if (typeof window !== "undefined" && !window.response) {
37+
if (typeof window !== "undefined") {
3638
window.response = {
3739
receiveScanResult: (jsonData: string) => {
38-
console.log("Received scan result:", jsonData);
40+
try {
41+
const data = JSON.parse(jsonData);
42+
setScanData(data);
43+
} catch (error) {
44+
console.error("Invalid JSON data:", error);
45+
}
3946
},
4047
};
4148
}
@@ -47,8 +54,8 @@ export function WebBridgeProvider({ children }: WebBridgeProviderProps) {
4754
export function useWebBridge() {
4855
const webBridge = useContext(WebBridgeContext);
4956

50-
if (webBridge == null) {
51-
throw new Error("Wrap Web Bridge Provider");
57+
if (!webBridge) {
58+
throw new Error("WebBridgeProvider must be used within a WebBridgeContext");
5259
}
5360

5461
return webBridge;

0 commit comments

Comments
 (0)