UNPKG

react-native-launch-navigator

Version:

A React Native module for launching today's most popular navigation/ride apps to navigate to a destination.

314 lines (299 loc) 7.72 kB
'use strict'; /********************* * Internal properties *********************/ let ln = {}; /****************** * Public Constants ******************/ /** * Supported platforms * @type {object} */ ln.PLATFORM = { ANDROID: "android", IOS: "ios" }; /** * string constants, used to identify apps in native code * @type {object} */ ln.APP = { APPLE_MAPS: "apple_maps", GOOGLE_MAPS: "google_maps", WAZE: "waze", CITYMAPPER: "citymapper", NAVIGON: "navigon", TRANSIT_APP: "transit_app", YANDEX: "yandex", UBER: "uber", TOMTOM: "tomtom", BING_MAPS: "bing_maps", SYGIC: "sygic", HERE_MAPS: "here_maps", MOOVIT: "moovit", LYFT: "lyft", MAPS_ME: "maps_me", CABIFY: "cabify", BAIDU: "baidu", TAXIS_99: "taxis_99", GAODE: "gaode" }; /** * Explicitly supported apps by platform * @type {object} */ ln.APPS_BY_PLATFORM = {}; ln.APPS_BY_PLATFORM[ln.PLATFORM.ANDROID] = [ ln.APP.GOOGLE_MAPS, ln.APP.CITYMAPPER, ln.APP.UBER, ln.APP.WAZE, ln.APP.YANDEX, ln.APP.SYGIC, ln.APP.HERE_MAPS, ln.APP.MOOVIT, ln.APP.LYFT, ln.APP.MAPS_ME, ln.APP.CABIFY, ln.APP.BAIDU, ln.APP.TAXIS_99, ln.APP.GAODE ]; ln.APPS_BY_PLATFORM[ln.PLATFORM.IOS] = [ ln.APP.APPLE_MAPS, ln.APP.GOOGLE_MAPS, ln.APP.WAZE, ln.APP.CITYMAPPER, ln.APP.NAVIGON, ln.APP.TRANSIT_APP, ln.APP.YANDEX, ln.APP.UBER, ln.APP.TOMTOM, ln.APP.SYGIC, ln.APP.HERE_MAPS, ln.APP.MOOVIT, ln.APP.LYFT, ln.APP.MAPS_ME, ln.APP.CABIFY, ln.APP.BAIDU, ln.APP.TAXIS_99, ln.APP.GAODE ]; /** * Stock maps app that is always present on each platform * @type {object} */ ln.STOCK_APP = {}; ln.STOCK_APP[ln.PLATFORM.ANDROID] = ln.APP.GOOGLE_MAPS; ln.STOCK_APP[ln.PLATFORM.IOS] = ln.APP.APPLE_MAPS; /** * Display names for supported apps * @type {object} */ ln.APP_NAMES = {}; ln.APP_NAMES[ln.APP.APPLE_MAPS] = "Apple Maps"; ln.APP_NAMES[ln.APP.GOOGLE_MAPS] = "Google Maps"; ln.APP_NAMES[ln.APP.WAZE] = "Waze"; ln.APP_NAMES[ln.APP.CITYMAPPER] = "Citymapper"; ln.APP_NAMES[ln.APP.NAVIGON] = "Navigon"; ln.APP_NAMES[ln.APP.TRANSIT_APP] = "Transit App"; ln.APP_NAMES[ln.APP.YANDEX] = "Yandex Navigator"; ln.APP_NAMES[ln.APP.UBER] = "Uber"; ln.APP_NAMES[ln.APP.TOMTOM] = "Tomtom"; ln.APP_NAMES[ln.APP.BING_MAPS] = "Bing Maps"; ln.APP_NAMES[ln.APP.SYGIC] = "Sygic"; ln.APP_NAMES[ln.APP.HERE_MAPS] = "HERE Maps"; ln.APP_NAMES[ln.APP.MOOVIT] = "Moovit"; ln.APP_NAMES[ln.APP.LYFT] = "Lyft"; ln.APP_NAMES[ln.APP.MAPS_ME] = "MAPS.ME"; ln.APP_NAMES[ln.APP.CABIFY] = "Cabify"; ln.APP_NAMES[ln.APP.BAIDU] = "Baidu Maps"; ln.APP_NAMES[ln.APP.TAXIS_99] = "99 Taxi"; ln.APP_NAMES[ln.APP.GAODE] = "Gaode Maps (Amap)"; /** * All possible transport modes * @type {object} */ ln.TRANSPORT_MODE = { DRIVING: "driving", WALKING: "walking", BICYCLING: "bicycling", TRANSIT: "transit" }; /** * Supported transport modes by apps and platform * @type {object} */ ln.TRANSPORT_MODES = {}; // Android ln.TRANSPORT_MODES[ln.PLATFORM.ANDROID] = {}; ln.TRANSPORT_MODES[ln.PLATFORM.ANDROID][ln.APP.GOOGLE_MAPS] = [ // Only launchMode=turn-by-turn ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.BICYCLING, ln.TRANSPORT_MODE.TRANSIT ]; ln.TRANSPORT_MODES[ln.PLATFORM.ANDROID][ln.APP.SYGIC] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING ]; ln.TRANSPORT_MODES[ln.PLATFORM.ANDROID][ln.APP.MAPS_ME] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.BICYCLING, ln.TRANSPORT_MODE.TRANSIT ]; ln.TRANSPORT_MODES[ln.PLATFORM.ANDROID][ln.APP.BAIDU] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.BICYCLING, ln.TRANSPORT_MODE.TRANSIT ]; ln.TRANSPORT_MODES[ln.PLATFORM.ANDROID][ln.APP.GAODE] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.BICYCLING, ln.TRANSPORT_MODE.TRANSIT ]; // iOS ln.TRANSPORT_MODES[ln.PLATFORM.IOS] = {}; ln.TRANSPORT_MODES[ln.PLATFORM.IOS][ln.APP.GOOGLE_MAPS] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.BICYCLING, ln.TRANSPORT_MODE.TRANSIT ]; ln.TRANSPORT_MODES[ln.PLATFORM.IOS][ln.APP.APPLE_MAPS] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.TRANSIT ]; ln.TRANSPORT_MODES[ln.PLATFORM.IOS][ln.APP.SYGIC] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING ]; ln.TRANSPORT_MODES[ln.PLATFORM.IOS][ln.APP.MAPS_ME] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.BICYCLING, ln.TRANSPORT_MODE.TRANSIT ]; ln.TRANSPORT_MODES[ln.PLATFORM.IOS][ln.APP.BAIDU] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.BICYCLING, ln.TRANSPORT_MODE.TRANSIT ]; ln.TRANSPORT_MODES[ln.PLATFORM.IOS][ln.APP.GAODE] = [ ln.TRANSPORT_MODE.DRIVING, ln.TRANSPORT_MODE.WALKING, ln.TRANSPORT_MODE.BICYCLING, ln.TRANSPORT_MODE.TRANSIT ]; /** * Apps by platform that support specifying a start location * @type {object} */ ln.SUPPORTS_START = {}; ln.SUPPORTS_START[ln.PLATFORM.ANDROID] = [ ln.APP.GOOGLE_MAPS, // Only launchMode=maps ln.APP.CITYMAPPER, ln.APP.UBER, ln.APP.YANDEX, ln.APP.HERE_MAPS, ln.APP.MOOVIT, ln.APP.LYFT, ln.APP.MAPS_ME, ln.APP.CABIFY, ln.APP.BAIDU, ln.APP.TAXIS_99, ln.APP.GAODE ]; ln.SUPPORTS_START[ln.PLATFORM.IOS] = [ ln.APP.APPLE_MAPS, ln.APP.GOOGLE_MAPS, ln.APP.CITYMAPPER, ln.APP.TRANSIT_APP, ln.APP.YANDEX, ln.APP.UBER, ln.APP.HERE_MAPS, ln.APP.MOOVIT, ln.APP.LYFT, ln.APP.MAPS_ME, ln.APP.CABIFY, ln.APP.BAIDU, ln.APP.TAXIS_99, ln.APP.GAODE ]; /** * Apps by platform that support specifying a start nickname * @type {object} */ ln.SUPPORTS_START_NAME = {}; ln.SUPPORTS_START_NAME[ln.PLATFORM.ANDROID] = [ ln.APP.CITYMAPPER, ln.APP.UBER, ln.APP.HERE_MAPS, ln.APP.MOOVIT, ln.APP.CABIFY, ln.APP.BAIDU, ln.APP.TAXIS_99, ln.APP.GAODE ]; ln.SUPPORTS_START_NAME[ln.PLATFORM.IOS] = [ ln.APP.APPLE_MAPS, // Only launchMode=mapkit ln.APP.CITYMAPPER, ln.APP.UBER, ln.APP.HERE_MAPS, ln.APP.MOOVIT, ln.APP.CABIFY, ln.APP.BAIDU, ln.APP.TAXIS_99, ln.APP.GAODE ]; /** * Apps by platform that support specifying a destination nickname * @type {object} */ ln.SUPPORTS_DEST_NAME = {}; ln.SUPPORTS_DEST_NAME[ln.PLATFORM.ANDROID] = [ ln.APP.GOOGLE_MAPS, // only launchMode=geo ln.APP.CITYMAPPER, ln.APP.UBER, ln.APP.HERE_MAPS, ln.APP.MOOVIT, ln.APP.CABIFY, ln.APP.BAIDU, ln.APP.TAXIS_99, ln.APP.GAODE ]; ln.SUPPORTS_DEST_NAME[ln.PLATFORM.IOS] = [ ln.APP.APPLE_MAPS, // Only launchMode=mapkit ln.APP.CITYMAPPER, ln.APP.NAVIGON, ln.APP.UBER, ln.APP.TOMTOM, ln.APP.HERE_MAPS, ln.APP.MOOVIT, ln.APP.CABIFY, ln.APP.BAIDU, ln.APP.TAXIS_99, ln.APP.GAODE ]; /** * Apps by platform that support specifying a launch mode * @type {object} */ ln.SUPPORTS_LAUNCH_MODE = {}; ln.SUPPORTS_LAUNCH_MODE[ln.PLATFORM.ANDROID] = [ ln.APP.GOOGLE_MAPS ]; ln.SUPPORTS_LAUNCH_MODE[ln.PLATFORM.IOS] = [ ln.APP.APPLE_MAPS ]; ln.COORDS_REGEX = /^[-\d.]+,[\s]*[-\d.]+$/; /************ * Export ************/ module.exports = ln;