Skip to content

Commit f3a44d1

Browse files
committed
refactor: 네이티브 핸들러 타입 수정
1 parent ba939de commit f3a44d1

File tree

8 files changed

+59
-45
lines changed

8 files changed

+59
-45
lines changed

src/components/Home/Home.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ import { useRoute } from "@/hooks/common/useRoute";
1010

1111
import { useScanDataStore } from "@/store/useScanDataStore";
1212

13-
export interface ScanResult {
14-
[key: string]: string;
15-
}
16-
1713
const Home = () => {
1814
const { send } = useAppBridge();
1915

@@ -22,7 +18,7 @@ const Home = () => {
2218
const { navigateToReceiptEdit } = useRoute();
2319

2420
useEffect(() => {
25-
if (scanData.length > 0) {
21+
if (scanData.parsed && scanData.parsed.length > 0) {
2622
navigateToReceiptEdit();
2723
}
2824
}, [scanData]);

src/components/ReceiptEdit/ReceiptEdit.tsx

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ const ReceiptEdit = () => {
2424
const [focusState, setFocusState] = useState<{ [key: string]: boolean }>({});
2525

2626
useEffect(() => {
27-
if (Array.isArray(scanData) && scanData.length > 0) {
28-
setFormData(scanData);
27+
if (Array.isArray(scanData.parsed) && scanData.parsed.length > 0) {
28+
setFormData(scanData.parsed);
2929

30-
const initialFocusState = scanData.reduce(
31-
(acc, data) => {
30+
const initialFocusState = scanData.parsed.reduce(
31+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
32+
(acc: any, data: any) => {
3233
const keys = Object.keys(data);
3334
keys.forEach((key) => (acc[key] = false));
3435
return acc;
@@ -49,7 +50,12 @@ const ReceiptEdit = () => {
4950

5051
const handleInputChange = (index: number, key: string, value: string) => {
5152
setFormData((prevData) =>
52-
prevData.map((item, idx) => (idx === index ? { ...item, [key]: value } : item)),
53+
prevData.map((item, idx) => {
54+
if (idx === index) {
55+
return { ...item, [key]: value };
56+
}
57+
return item;
58+
}),
5359
);
5460
};
5561

@@ -79,9 +85,7 @@ const ReceiptEdit = () => {
7985
<div className={styles.Top}>
8086
<div className={styles.TitleBox}>
8187
<Text variant="titleM" color="primary" as="h1" truncated>
82-
{formData.length > 0 &&
83-
Object.keys(formData[0]).length > 0 &&
84-
formData[0][Object.keys(formData[0])[0]]}
88+
{formData.length > 0 && Object.keys(formData[0]).length > 0 && formData[0].value}
8589
</Text>
8690
<Text variant="titleM" color="primary" as="h1">
8791
@@ -94,21 +98,19 @@ const ReceiptEdit = () => {
9498
<div className={styles.InfoList}>
9599
{formData.map((data, index) => (
96100
<div key={index} className={styles.InfoItem}>
97-
{Object.keys(data).map((key) => (
98-
<div key={key} className={styles.InfoItem}>
99-
<Text variant="bodyXsm" color="secondary">
100-
{key}
101-
</Text>
102-
<Input
103-
placeholder={`${key} 입력`}
104-
value={data[key]}
105-
onFocus={() => handleFocus(key)}
106-
onBlur={() => handleBlur(key)}
107-
isFocus={focusState[key] || false}
108-
onChange={(e) => handleInputChange(index, key, e.target.value)}
109-
/>
110-
</div>
111-
))}
101+
<div className={styles.InfoItem}>
102+
<Text variant="bodyXsm" color="secondary">
103+
{data.key}
104+
</Text>
105+
<Input
106+
placeholder={`${data.key} 입력`}
107+
value={data.value}
108+
onFocus={() => handleFocus(data.key)}
109+
onBlur={() => handleBlur(data.key)}
110+
isFocus={focusState[data.key] || false}
111+
onChange={(e) => handleInputChange(index, data.key, e.target.value)}
112+
/>
113+
</div>
112114
</div>
113115
))}
114116
</div>

src/components/provider/AppBridgeProvider/AppBridgeMessage.types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ export interface CopyMessage {
5050

5151
export interface ReceiveScanResultMessage {
5252
type: AppBridgeMessageType.RECEIVE_SCAN_RESULT;
53-
payload: Array<{ [key: string]: string }>;
53+
// payload: Array<{ [key: string]: string }>;
54+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
55+
payload: any;
5456
}
5557

5658
export interface ReceiveGeneratedReviewMessage {

src/components/provider/AppBridgeProvider/AppBridgeProvider.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,11 @@ export function AppBridgeProvider({ children }: AppBridgeProviderProps) {
4141
useEffect(() => {
4242
if (typeof window !== "undefined") {
4343
window.response = {
44-
receiveScanResult: (jsonData: string) => {
44+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
45+
receiveScanResult: (jsonData: any) => {
4546
try {
46-
const data = JSON.parse(jsonData);
47-
setScanData(data);
47+
// alert("Scan Result: " + jsonData);
48+
setScanData(JSON.parse(jsonData));
4849
} catch (error) {
4950
console.error("Invalid JSON data for scan result:", error);
5051
}

src/components/provider/AppBridgeProvider/convertToNativeMessage.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ const iosHandlers = {
1313
}) => window.webkit?.messageHandlers.createReview.postMessage(message.payload),
1414
[AppBridgeMessageType.COPY]: (message: { payload: { review: string } }) =>
1515
window.webkit?.messageHandlers.copy.postMessage(message.payload),
16-
[AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: string } }) =>
16+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
17+
[AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: any } }) =>
1718
window.response?.receiveScanResult(message.payload.result),
1819
[AppBridgeMessageType.RECEIVE_GENERATED_REVIEW]: (message: { payload: { result: string } }) =>
1920
window.response?.receiveGeneratedReview(message.payload.result),
@@ -25,10 +26,11 @@ const androidHandlers = {
2526
[AppBridgeMessageType.SHARE]: () => window.AndroidBridge?.share(),
2627
[AppBridgeMessageType.CREATE_REVIEW]: (message: {
2728
payload: { ocrText: string; hashTag: string[]; reviewStyle: string };
28-
}) => window.AndroidBridge?.createReview(message.payload),
29+
}) => window.AndroidBridge?.createReview(JSON.stringify(message.payload)),
2930
[AppBridgeMessageType.COPY]: (message: { payload: { review: string } }) =>
30-
window.AndroidBridge?.copy(message.payload),
31-
[AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: string } }) =>
31+
window.AndroidBridge?.copy(JSON.stringify(message.payload)),
32+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
33+
[AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: any } }) =>
3234
window.response?.receiveScanResult(message.payload.result),
3335
[AppBridgeMessageType.RECEIVE_GENERATED_REVIEW]: (message: { payload: { result: string } }) =>
3436
window.response?.receiveGeneratedReview(message.payload.result),

src/pages/ReceiptEditPage.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,22 @@ import Icon from "@/components/ui/Icon/Icon";
44

55
import { useRoute } from "@/hooks/common/useRoute";
66

7+
import { useScanDataStore } from "@/store/useScanDataStore";
8+
79
const ReceiptEditPage = () => {
810
const { navigateToHome } = useRoute();
911

12+
const { resetScanData } = useScanDataStore();
13+
14+
const handleNavigateToHome = () => {
15+
resetScanData();
16+
navigateToHome();
17+
};
18+
1019
return (
1120
<>
1221
<Navbar>
13-
<Navbar.LeftButton onClick={navigateToHome}>
22+
<Navbar.LeftButton onClick={handleNavigateToHome}>
1423
<Icon name="leftArrow" />
1524
</Navbar.LeftButton>
1625
</Navbar>

src/store/useScanDataStore.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import { create } from "zustand";
22

3-
import type { ScanResult } from "@/components/Home/Home";
4-
53
interface ScanDataStoreProps {
6-
scanData: ScanResult[];
7-
setScanData: (scanData: ScanResult[]) => void;
4+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
5+
scanData: any;
6+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
7+
setScanData: (scanData: any[]) => void;
88
resetScanData: () => void;
99
}
1010

1111
export const useScanDataStore = create<ScanDataStoreProps>((set) => ({
1212
scanData: [],
13-
setScanData: (scanData: ScanResult[]) => set({ scanData }),
13+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
14+
setScanData: (scanData: any[]) => set({ scanData }),
1415
resetScanData: () => set({ scanData: [] }),
1516
}));

src/types/global.d.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ declare global {
2121
}
2222
interface Window {
2323
response?: {
24-
receiveScanResult: (jsonData: string) => void;
24+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
25+
receiveScanResult: (jsonData: any) => void;
2526
receiveGeneratedReview: (jsonData: string) => void;
2627
};
2728
webkit?: {
@@ -37,8 +38,8 @@ declare global {
3738
openCamera: () => void;
3839
openGallery: () => void;
3940
share: () => void;
40-
createReview: (json: CreateReviewPayload) => void;
41-
copy: (json: CopyMessagePayload) => void;
41+
createReview: (json: string) => void;
42+
copy: (json: string) => void;
4243
};
4344
}
4445
}

0 commit comments

Comments
 (0)