@adyen/react-native
Version:
Wraps Adyen Checkout Drop-In and Components for iOS and Android for convenient use with React Native
55 lines (50 loc) • 1.9 kB
text/typescript
import {
ConfigPlugin,
withAppDelegate,
withEntitlementsPlist,
} from '@expo/config-plugins';
import { setEntitlements } from './setEntitlements';
import { AdyenPluginProps } from './withAdyen';
import { setImport } from './setImport';
import { setApplicationOpenUrl } from './setApplicationOpenUrl';
import { setApplicationContinueUserActivity } from './setApplicationContinueUserActivity';
import { setImportSwift } from './setImportSwift';
import { setApplicationOpenUrlSwift } from './setApplicationOpenUrlSwift';
import { setApplicationContinueUserActivitySwift } from './setApplicationContinueUserActivitySwift';
export const withAdyenIos: ConfigPlugin<AdyenPluginProps> = (
config,
{ merchantIdentifier, useFrameworks }
) => {
config = withAppDelegate(config, (newConfig) => {
var appDelegate = newConfig.modResults.contents;
if (
appDelegate.includes('ADYRedirectComponent') ||
appDelegate.includes('import Adyen')
) {
return newConfig;
}
// Detect if it's Swift or Objective-C
const isSwift =
appDelegate.includes('import Expo') ||
appDelegate.includes('import UIKit');
if (isSwift) {
appDelegate = setImportSwift(appDelegate);
appDelegate = setApplicationOpenUrlSwift(appDelegate);
appDelegate = setApplicationContinueUserActivitySwift(appDelegate);
} else {
appDelegate = setImport(appDelegate, useFrameworks);
appDelegate = setApplicationOpenUrl(appDelegate);
appDelegate = setApplicationContinueUserActivity(appDelegate);
}
newConfig.modResults.contents = appDelegate;
return newConfig;
});
if (merchantIdentifier) {
config = withEntitlementsPlist(config, (newConfig) => {
const entitlements = newConfig.modResults;
newConfig.modResults = setEntitlements(entitlements, merchantIdentifier);
return newConfig;
});
}
return config;
};