useAppBridge Hook 패턴으로 이미지 저장 기능 개선

iOS 웹뷰에서 이미지 다운로드를 위한 네이티브 브릿지 기능을
React Hook 패턴으로 리팩토링하여 일관성과 재사용성 개선

변경사항:
- useAppBridge Hook에 saveImage 메서드 추가
- utils/appBridge.ts에 saveImage 메서드 구현
- 세 개의 샘플 컴포넌트에서 useAppBridge Hook 사용
  * cash-receipt-sample.tsx
  * deposit-receipt-sample.tsx
  * tax-invoice-sample.tsx
- 직접 appBridge import 제거, Hook 패턴으로 통일
- TypeScript 타입 안전성 개선 (null 체크 추가)

기술 개선:
- React Hook 패턴으로 컴포넌트 라이프사이클과 통합
- safeCall을 통한 자동 에러 처리
- iOS 환경에서만 네이티브 브릿지 사용
- Android/웹은 기존 다운로드 방식 유지

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Jay Sheen
2025-11-12 16:26:23 +09:00
parent a1d01e68e4
commit 662e76af96
5 changed files with 133 additions and 31 deletions

View File

@@ -1,6 +1,6 @@
import { useState, useEffect, useCallback } from 'react';
import { appBridge } from '@/utils/appBridge';
import { DeviceInfo, NotificationSettingResponse, ShareContent } from '@/types';
import { DeviceInfo, NotificationSettingResponse, ShareContent, SaveImageRequest, SaveImageResponse } from '@/types';
import { LoginResponse } from '@/entities/user/model/types';
interface UseAppBridgeReturn {
@@ -75,6 +75,9 @@ interface UseAppBridgeReturn {
// 알림 링크 확인
checkAlarmLink: () => Promise<void>;
// 이미지 저장
saveImage: (request: SaveImageRequest) => Promise<SaveImageResponse | undefined>;
}
export const useAppBridge = (): UseAppBridgeReturn => {
@@ -325,6 +328,14 @@ export const useAppBridge = (): UseAppBridgeReturn => {
return appBridge.safeCall(() => appBridge.checkAlarmLink());
}, [isNativeEnvironment]);
const saveImage = useCallback(async (request: SaveImageRequest): Promise<SaveImageResponse | undefined> => {
if (!isIOS) {
// iOS가 아닌 경우 undefined 반환 (호출하는 쪽에서 fallback 처리)
return undefined;
}
return appBridge.safeCall(() => appBridge.saveImage(request));
}, [isIOS]);
return {
isNativeEnvironment,
isAndroid,
@@ -353,6 +364,7 @@ export const useAppBridge = (): UseAppBridgeReturn => {
getNotificationSetting,
setNotificationSetting,
getLanguage,
checkAlarmLink
checkAlarmLink,
saveImage
};
};