GithubHelp home page GithubHelp logo

isabella232 / react-native-search-api Goto Github PK

View Code? Open in Web Editor NEW

This project forked from metamask/react-native-search-api

0.0 0.0 0.0 25 KB

The SearchApi module gives you a general React Native interface to interact with the iOS Search API, Core Spotlight.

License: MIT License

JavaScript 33.82% Objective-C 66.18%

react-native-search-api's Introduction

React Native Search Api module

The SearchApi module gives you a general React Native interface to interact with the iOS Search API, Core Spotlight.

For more information about iOS Search APIs, see https://developer.apple.com/ios/search/.

Installation

Automatic part

  1. npm install react-native-search-api --save
  2. react-native link

Manual part

To the top of your AppDelegate.m add the following line:

#import "RCTSearchApiManager.h"

In your AppDelegate implementation add the following:

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    return [RCTSearchApiManager application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}

Usage

Subscribe to the search item open events in your components like this:

componentDidMount() {
    <...>
    SearchApi.addOnSpotlightItemOpenEventListener(this.handleOnSpotlightItemOpenEventListener);
    SearchApi.addOnAppHistoryItemOpenEventListener(this.handleOnAppHistoryItemOpenEventListener);
}

To prevent memory leaks don't forget to unsubscribe:

componentWillUnmount() {
    <...>
    SearchApi.removeOnSpotlightItemOpenEventListener(this.handleOnSpotlightItemOpenEventListener);
    SearchApi.removeOnAppHistoryItemOpenEventListener(this.handleOnAppHistoryItemOpenEventListener)
}

Generally you should be interested whether the app was started using the search, therefore consider using the following two methods:

// For the spotlight item:
SearchApi.getInitialSpotlightItem().then(result => {
    if (result) {
        console.log('Started with a spotlight item!')
    }
})
// For the app history item:
SearchApi.getInitialAppHistoryItem().then(result => {
    if (result) {
        console.log('Started with an app history item!')
    }
})

In order to create a new spotlight item, use indexSpotlightItem or indexSpotlightItems:

SearchApi.indexSpotlightItem(item).then(result => {
    console.log('Success');
}).catch(err => {
    console.log('Error: ' + err);
});

To add new items to the app history, use createUserActivity:

SearchApi.indexAppHistoryItem(item).then(result => {
    console.log('Success');
    that.setState({labelText: 'Success'});
}).catch(err => {
    console.log('Error: ' + err);
    that.setState({labelText: ('Error: ' + err)});
});

The parameters, that items may specify are listed below:

Search item keys

Dictionaries, passed to create spotlight and app history items have some common and some specific keys, here is the list of all possible keys.

Common keys

title: string

Title of the item. Required for both item types.

contentDescription: string

Description of the item. Optional.

keywords: Array

An array of keywords, assigned to the search item. Optional.

thumbnail: string|int|object

Thumbnail to be presented in the search results. The same format as source in the Image component. Optional.

Examples:

var localItem = {
  <...>,
  thumbnail: require('/react-native/img/favicon.png')
};
var remoteItem = {
  <...>,
  thumbnail: {uri: 'https://facebook.github.io/react-native/docs/assets/favicon.png'}
};

Please refer to documentation for more details.

Spotlight-specific keys

uniqueIdentifier: string

The unique identifier of the spotlight item, passed later on during the item opening event. Required.

domain: string

The domain for the spotlight item. Optional.

App history-specific keys

userInfo: Object

A dictionary, passed later on during the item opening event. Required.

eligibleForPublicIndexing: boolean

A flag, that when set to true allows to add the item to the public index. Optional.

expirationDate: Date

Expiration date of the user activity item. Optional.

webpageURL: string

URL of the page, representing the same content on the app's website.

Credits

© 2017 PresenceKit by Ombori AB

react-native-search-api's People

Contributors

andrepimenta avatar danchoys avatar hassellof avatar timbuckley avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.