Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions src/components/Home/Home.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,6 @@ import { useRoute } from "@/hooks/common/useRoute";

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

export interface ScanResult {
[key: string]: string;
}

const Home = () => {
const { send } = useAppBridge();

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

useEffect(() => {
if (scanData.length > 0) {
if (scanData.parsed && scanData.parsed.length > 0) {
navigateToReceiptEdit();
}
}, [scanData]);
Expand Down
48 changes: 25 additions & 23 deletions src/components/ReceiptEdit/ReceiptEdit.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,12 @@ const ReceiptEdit = () => {
const [focusState, setFocusState] = useState<{ [key: string]: boolean }>({});

useEffect(() => {
if (Array.isArray(scanData) && scanData.length > 0) {
setFormData(scanData);
if (Array.isArray(scanData.parsed) && scanData.parsed.length > 0) {
setFormData(scanData.parsed);

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

const handleInputChange = (index: number, key: string, value: string) => {
setFormData((prevData) =>
prevData.map((item, idx) => (idx === index ? { ...item, [key]: value } : item)),
prevData.map((item, idx) => {
if (idx === index) {
return { ...item, [key]: value };
}
return item;
}),
);
};

Expand Down Expand Up @@ -79,9 +85,7 @@ const ReceiptEdit = () => {
<div className={styles.Top}>
<div className={styles.TitleBox}>
<Text variant="titleM" color="primary" as="h1" truncated>
{formData.length > 0 &&
Object.keys(formData[0]).length > 0 &&
formData[0][Object.keys(formData[0])[0]]}
{formData.length > 0 && Object.keys(formData[0]).length > 0 && formData[0].value}
</Text>
<Text variant="titleM" color="primary" as="h1">
Expand All @@ -94,21 +98,19 @@ const ReceiptEdit = () => {
<div className={styles.InfoList}>
{formData.map((data, index) => (
<div key={index} className={styles.InfoItem}>
{Object.keys(data).map((key) => (
<div key={key} className={styles.InfoItem}>
<Text variant="bodyXsm" color="secondary">
{key}
</Text>
<Input
placeholder={`${key} 입력`}
value={data[key]}
onFocus={() => handleFocus(key)}
onBlur={() => handleBlur(key)}
isFocus={focusState[key] || false}
onChange={(e) => handleInputChange(index, key, e.target.value)}
/>
</div>
))}
<div className={styles.InfoItem}>
<Text variant="bodyXsm" color="secondary">
{data.key}
</Text>
<Input
placeholder={`${data.key} 입력`}
value={data.value}
onFocus={() => handleFocus(data.key)}
onBlur={() => handleBlur(data.key)}
isFocus={focusState[data.key] || false}
onChange={(e) => handleInputChange(index, data.key, e.target.value)}
/>
</div>
</div>
))}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ export interface CopyMessage {

export interface ReceiveScanResultMessage {
type: AppBridgeMessageType.RECEIVE_SCAN_RESULT;
payload: Array<{ [key: string]: string }>;
// payload: Array<{ [key: string]: string }>;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
payload: any;
}

export interface ReceiveGeneratedReviewMessage {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,11 @@ export function AppBridgeProvider({ children }: AppBridgeProviderProps) {
useEffect(() => {
if (typeof window !== "undefined") {
window.response = {
receiveScanResult: (jsonData: string) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
receiveScanResult: (jsonData: any) => {
try {
const data = JSON.parse(jsonData);
setScanData(data);
// alert("Scan Result: " + jsonData);
setScanData(JSON.parse(jsonData));
} catch (error) {
console.error("Invalid JSON data for scan result:", error);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ const iosHandlers = {
}) => window.webkit?.messageHandlers.createReview.postMessage(message.payload),
[AppBridgeMessageType.COPY]: (message: { payload: { review: string } }) =>
window.webkit?.messageHandlers.copy.postMessage(message.payload),
[AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: string } }) =>
// eslint-disable-next-line @typescript-eslint/no-explicit-any
[AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: any } }) =>
window.response?.receiveScanResult(message.payload.result),
[AppBridgeMessageType.RECEIVE_GENERATED_REVIEW]: (message: { payload: { result: string } }) =>
window.response?.receiveGeneratedReview(message.payload.result),
Expand All @@ -25,10 +26,11 @@ const androidHandlers = {
[AppBridgeMessageType.SHARE]: () => window.AndroidBridge?.share(),
[AppBridgeMessageType.CREATE_REVIEW]: (message: {
payload: { ocrText: string; hashTag: string[]; reviewStyle: string };
}) => window.AndroidBridge?.createReview(message.payload),
}) => window.AndroidBridge?.createReview(JSON.stringify(message.payload)),
[AppBridgeMessageType.COPY]: (message: { payload: { review: string } }) =>
window.AndroidBridge?.copy(message.payload),
[AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: string } }) =>
window.AndroidBridge?.copy(JSON.stringify(message.payload)),
// eslint-disable-next-line @typescript-eslint/no-explicit-any
[AppBridgeMessageType.RECEIVE_SCAN_RESULT]: (message: { payload: { result: any } }) =>
window.response?.receiveScanResult(message.payload.result),
[AppBridgeMessageType.RECEIVE_GENERATED_REVIEW]: (message: { payload: { result: string } }) =>
window.response?.receiveGeneratedReview(message.payload.result),
Expand Down
11 changes: 10 additions & 1 deletion src/pages/ReceiptEditPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,22 @@ import Icon from "@/components/ui/Icon/Icon";

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

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

const ReceiptEditPage = () => {
const { navigateToHome } = useRoute();

const { resetScanData } = useScanDataStore();

const handleNavigateToHome = () => {
resetScanData();
navigateToHome();
};

return (
<>
<Navbar>
<Navbar.LeftButton onClick={navigateToHome}>
<Navbar.LeftButton onClick={handleNavigateToHome}>
<Icon name="leftArrow" />
</Navbar.LeftButton>
</Navbar>
Expand Down
11 changes: 6 additions & 5 deletions src/store/useScanDataStore.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
import { create } from "zustand";

import type { ScanResult } from "@/components/Home/Home";

interface ScanDataStoreProps {
scanData: ScanResult[];
setScanData: (scanData: ScanResult[]) => void;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
scanData: any;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
setScanData: (scanData: any[]) => void;
resetScanData: () => void;
}

export const useScanDataStore = create<ScanDataStoreProps>((set) => ({
scanData: [],
setScanData: (scanData: ScanResult[]) => set({ scanData }),
// eslint-disable-next-line @typescript-eslint/no-explicit-any
setScanData: (scanData: any[]) => set({ scanData }),
resetScanData: () => set({ scanData: [] }),
}));
7 changes: 4 additions & 3 deletions src/types/global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ declare global {
}
interface Window {
response?: {
receiveScanResult: (jsonData: string) => void;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
receiveScanResult: (jsonData: any) => void;
receiveGeneratedReview: (jsonData: string) => void;
};
webkit?: {
Expand All @@ -37,8 +38,8 @@ declare global {
openCamera: () => void;
openGallery: () => void;
share: () => void;
createReview: (json: CreateReviewPayload) => void;
copy: (json: CopyMessagePayload) => void;
createReview: (json: string) => void;
copy: (json: string) => void;
};
}
}