@lmapp/react-native-cloudpayments
Version:
π ΠΠΎΡΠ½ΡΠΉ SDK Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ ΠΏΠ»Π°ΡΠ΅ΠΆΠ΅ΠΉ CloudPayments Π² React Native. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Apple Pay, Google Pay, Π‘ΠΠ, Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΡ ΠΊΠ°ΡΡ. ΠΠΎΠ»Π½Π°Ρ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ TypeScript. iOS 12+ ΠΈ Android 21+
118 lines (104 loc) β’ 4.11 kB
text/typescript
/**
* @fileoverview Π₯ΡΠΊ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ CloudPayments SDK
* @description ΠΠ°Π·ΠΎΠ²ΡΠΉ Ρ
ΡΠΊ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ΠΌ SDK
* @author Leonid Molchanov
* @since 1.0.0
*/
import { useCallback, useEffect, useRef } from 'react';
import { init } from '../../index';
import { EPaymentFormErrorCode } from '../../types';
import type {
IUseCloudPaymentsCoreOptions,
IUseCloudPaymentsCoreReturn,
} from './types';
// ============================================================================
// HOOK IMPLEMENTATION
// ============================================================================
/**
* Π₯ΡΠΊ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ CloudPayments SDK
*
* @description Π£ΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ SDK ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΡΠ°ΡΡΡΠ΅.
* ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ SDK ΠΏΡΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° (Π΅ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π°Π²ΡΠΎΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ).
*
* @param publicId - ΠΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΌΠ΅ΡΡΠ°Π½ΡΠ° CloudPayments
* @param options - ΠΠΏΡΠΈΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ
ΡΠΊΠ°
* @returns ΠΠ±ΡΠ΅ΠΊΡ Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΡΡΠ°ΡΡΡΠΎΠΌ
*
* @example ΠΠ°Π·ΠΎΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
* ```typescript
* const { isInitialized, initializeSDK } = useCloudPaymentsCore(
* 'pk_test_1234567890abcdef'
* );
*
* // SDK Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ
* console.log('SDK ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½:', isInitialized);
* ```
*
* @example Π ΡΡΠ½Π°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ
* ```typescript
* const { isInitialized, initializeSDK } = useCloudPaymentsCore(
* 'pk_test_1234567890abcdef',
* { autoInitialize: false }
* );
*
* const handleManualInit = async () => {
* if (!isInitialized) {
* await initializeSDK();
* }
* };
* ```
*
* @since 1.0.0
*/
export const useCloudPaymentsCore = (
publicId: string,
options: IUseCloudPaymentsCoreOptions = {}
): IUseCloudPaymentsCoreReturn => {
// ============================================================================
// STATE & REFS
// ============================================================================
const isInitializedRef = useRef<boolean>(false);
const { autoInitialize = true } = options;
// ============================================================================
// FUNCTIONS
// ============================================================================
/**
* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ SDK
*/
const initializeSDK = useCallback(async (): Promise<void> => {
if (isInitializedRef.current) {
return;
}
try {
await init(publicId);
isInitializedRef.current = true;
} catch (error) {
const errorMessage =
error instanceof Error ? error.message : 'ΠΡΠΈΠ±ΠΊΠ° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ SDK';
// ΠΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΠΌ ΠΎΡΠΈΠ±ΠΊΡ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π² Π²ΡΠ·ΡΠ²Π°ΡΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅
const sdkError = new Error(errorMessage);
(sdkError as any).code = EPaymentFormErrorCode.SERVICE_UNINITIALIZED;
throw sdkError;
}
}, [publicId]);
// ============================================================================
// EFFECTS
// ============================================================================
/**
* ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ SDK ΠΏΡΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ
*/
useEffect(() => {
if (autoInitialize) {
initializeSDK().catch((error) => {
console.error('ΠΡΠΈΠ±ΠΊΠ° Π°Π²ΡΠΎΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ CloudPayments SDK:', error);
});
}
}, [autoInitialize, initializeSDK]);
// ============================================================================
// RETURN
// ============================================================================
return {
isInitialized: isInitializedRef.current,
initializeSDK,
};
};