react-native-spotlight-search
Version:
A React Native module for iOS that provides Spotlight search functionality.
50 lines (42 loc) • 1.76 kB
text/typescript
import {
ConfigPlugin,
createRunOncePlugin,
WarningAggregator,
withAppDelegate,
} from "@expo/config-plugins";
const pkg = require("react-native-spotlight-search/package.json");
const SPOTLIGHT_IMPORT = `
`;
const SPOTLIGHT_ACTIVITY = `- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {`;
const SPOTLIGHT_ACTIVITY_ADD = `- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
[RCTSpotlightSearch handleContinueUserActivity:userActivity];`;
const modifyAppDelegate = (appDelegate: string) => {
if (!appDelegate.includes(SPOTLIGHT_IMPORT)) {
appDelegate = SPOTLIGHT_IMPORT + appDelegate;
}
const updatedAppDelegate = appDelegate.replace(
SPOTLIGHT_ACTIVITY,
SPOTLIGHT_ACTIVITY_ADD
);
return updatedAppDelegate;
};
const withSpotlightAppDelegate = (config: any) => {
return withAppDelegate(config, (config) => {
if (['objc', 'objcpp'].includes(config.modResults.language)) {
config.modResults.contents = modifyAppDelegate(
config.modResults.contents
);
} else {
WarningAggregator.addWarningIOS(
"withSpotlightAppDelegate",
"Swift AppDelegate files are not supported yet."
);
}
return config;
});
};
const withSpotlight: ConfigPlugin<void> = (config) => {
config = withSpotlightAppDelegate(config);
return config;
};
export default createRunOncePlugin(withSpotlight, pkg.name, pkg.version);