Skip to content

Commit 13e1293

Browse files
committed
feat: 클라 -> 웹 영수증 OCR 결과 브릿지 구현
1 parent c66d8b2 commit 13e1293

File tree

2 files changed

+67
-0
lines changed

2 files changed

+67
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
export enum WebBridgeMessageType {
2+
RECEIVE_SCAN_RESULT = "RECEIVE_SCAN_RESULT",
3+
}
4+
5+
export type WebBridgeMessage = ReceiveScanResultMessage;
6+
7+
export interface ReceiveScanResultMessage {
8+
type: WebBridgeMessageType.RECEIVE_SCAN_RESULT;
9+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import type { ReactNode } from "react";
2+
import { createContext, useContext, useEffect } from "react";
3+
4+
declare global {
5+
interface Window {
6+
response: {
7+
receiveScanResult: (jsonData: string) => void;
8+
};
9+
}
10+
}
11+
// window.response = window.response || {};
12+
13+
interface WebBridgeMessage {
14+
type: string;
15+
payload?: unknown;
16+
}
17+
18+
interface WebBridge {
19+
receive: (message: WebBridgeMessage) => void;
20+
}
21+
22+
interface WebBridgeProviderProps {
23+
children: ReactNode;
24+
}
25+
26+
export const WebBridgeContext = createContext<null | WebBridge>(null);
27+
28+
export function WebBridgeProvider({ children }: WebBridgeProviderProps) {
29+
const receive = (message: WebBridgeMessage) => {
30+
try {
31+
if (typeof window !== "undefined" && window.response) {
32+
if (typeof window.response.receiveScanResult === "function") {
33+
window.response.receiveScanResult(JSON.stringify(message.payload));
34+
} else {
35+
console.warn("window.response.receiveScanResult is not available.");
36+
}
37+
}
38+
} catch (error) {
39+
console.error("WebBridge API call failed:", error);
40+
}
41+
};
42+
43+
useEffect(() => {
44+
window.response = window.response || {};
45+
}, []);
46+
47+
return <WebBridgeContext.Provider value={{ receive }}>{children}</WebBridgeContext.Provider>;
48+
}
49+
50+
export function useWebBridge() {
51+
const webBridge = useContext(WebBridgeContext);
52+
53+
if (webBridge == null) {
54+
throw new Error("Wrap Web Bridge Provider");
55+
}
56+
57+
return webBridge;
58+
}

0 commit comments

Comments
 (0)