UNPKG

@slanglabs/slang-conva-react-native-retail-assistant

Version:

The client library for adding and interacting with Slang CONVA's Retail In-App Voice Assistant.

523 lines (451 loc) 17.7 kB
import { NativeModules, DeviceEventEmitter } from "react-native"; import { NavigationUserJourney, OrderManagementUserJourney, SearchUserJourney } from "."; const { SlangRetailAssistant } = NativeModules; const NativeSlangRetailAssistant = SlangRetailAssistant; const AssistantUserJourney = { SEARCH: "retail_search", ORDER_MANAGEMENT: "retail_order_management", NAVIGATION: "retail_navigation" } const checkFunc = (cb, func) => { if (typeof cb === "function") { return true; } return false; }; const searchUserJourney = { notifyAppState: (appState) => { SlangRetailAssistant.notifySearchActionCompleted(appState); }, setSuccess: () => { SlangRetailAssistant.setSearchSuccess(); }, setFailure: () => { SlangRetailAssistant.setSearchFailure(); }, setItemNotFound: () => { SlangRetailAssistant.setItemNotFound(); }, setItemOutOfStock: () => { SlangRetailAssistant.setItemOutOfStock(); }, setItemNotSpecified: () => { SlangRetailAssistant.setItemNotSpecified(); }, setNeedItemQuantity: () => { SlangRetailAssistant.setNeedItemQuantity(); }, setNeedDisambiguation: () => { SlangRetailAssistant.setNeedDisambiguation(); }, setStopDisambiguation: () => { SlangRetailAssistant.setStopDisambiguation(); }, setUserJourneyToContinue: (assistantUserJourney, isSpoken) => { SlangRetailAssistant.setUserJourneyToContinue(AssistantUserJourney.SEARCH, assistantUserJourney, isSpoken); }, clearUserJourneyToContinue: () => { SlangRetailAssistant.clearUserJourneyToContinue(); } } const navigationUserJourney = { notifyAppState: (appState) => { SlangRetailAssistant.notifyNavigationActionCompleted(appState); }, setNavigationSuccess: () => { SlangRetailAssistant.setNavigationSuccess(); }, setNavigationFailure: () => { SlangRetailAssistant.setNavigationFailure(); }, setUserJourneyToContinue: (assistantUserJourney, isSpoken) => { SlangRetailAssistant.setUserJourneyToContinue(AssistantUserJourney.NAVIGATION, assistantUserJourney, isSpoken); }, clearUserJourneyToContinue: () => { SlangRetailAssistant.clearUserJourneyToContinue(); } } const orderUserJourney = { notifyAppState: (appState) => { SlangRetailAssistant.notifyOrderActionCompleted(appState); }, setSuccess: () => { SlangRetailAssistant.setOrderSuccess(); }, setFailure: () => { SlangRetailAssistant.setOrderFailure(appState); }, setOrdersEmpty: () => { SlangRetailAssistant.setOrdersEmpty(); }, setOrderNotFound: (index) => { SlangRetailAssistant.setOrderNotFound(index); }, setConfirmationRequired: () => { SlangRetailAssistant.setOrderConfirmationRequired(); }, setUserConfirmedCancel: () => { SlangRetailAssistant.setOrderUserConfirmedCancel(); }, setUserDeniedCancel: () => { SlangRetailAssistant.setOrderUserDeniedCancel(); }, setUserJourneyToContinue: (assistantUserJourney, isSpoken) => { SlangRetailAssistant.setUserJourneyToContinue(AssistantUserJourney.ORDER_MANAGEMENT, assistantUserJourney, isSpoken); }, clearUserJourneyToContinue: () => { SlangRetailAssistant.clearUserJourneyToContinue(); } } class RetailAssistantBridge { searchActionHandler = (searchInfo, searchUserJourney) => { searchUserJourney.setSuccess(); return SearchUserJourney.AppState.SEARCH_RESULTS; }; orderActionHandler = (orderInfo, orderUserJourney) => { orderUserJourney.setSuccess(); return OrderManagementUserJourney.AppState.VIEW_ORDER; }; navigationActionHandler = (navigationInfo, navigationUserJourney) => { navigationUserJourney.setSuccess(); return NavigationUserJourney.AppState.NAVIGATION; }; lifecycleObserver = {} constructor() { DeviceEventEmitter.addListener( "onSearch", async (searchInfo) => { try { const status = await this.searchActionHandler(searchInfo, searchUserJourney); console.log("Status is", status); if (status != null) { NativeSlangRetailAssistant.notifySearchActionCompleted(status); } } catch (e) { console.error("Error while executing Retail action handler", e); NativeSlangRetailAssistant.notifySearchActionCompleted(false); } } ); DeviceEventEmitter.addListener( "onOrderManagement", async (orderInfo) => { try { const status = await this.orderActionHandler(orderInfo, orderUserJourney); if (status != null) { NativeSlangRetailAssistant.notifyOrderActionCompleted(status); } } catch (e) { console.error("Error while executing Retail action handler", e); NativeSlangRetailAssistant.notifyOrderActionCompleted(false); } } ); DeviceEventEmitter.addListener( "onNavigation", async (navigationInfo) => { try { const status = await this.navigationActionHandler(navigationInfo, navigationUserJourney); if (status != null) { NativeSlangRetailAssistant.notifyNavigationActionCompleted(status); } } catch (e) { console.error("Error while executing Retail action handler", e); NativeSlangRetailAssistant.notifyNavigationActionCompleted(false); } } ); DeviceEventEmitter.addListener("onAssistantInitSuccess", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onAssistantInitSuccess, "onAssistantInitSuccess")) { this.lifecycleObserver.onAssistantInitSuccess(); } } }); DeviceEventEmitter.addListener("onAssistantInitFailure", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onAssistantInitFailure, "onAssistantInitFailure")) { if (params && "type" in params) { this.lifecycleObserver.onAssistantInitFailure(params.type); } } } }); DeviceEventEmitter.addListener("onAssistantInvoked", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onAssistantInvoked, "onAssistantInvoked")) { this.lifecycleObserver.onAssistantInvoked(); } } }); DeviceEventEmitter.addListener("onAssistantClosed", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onAssistantClosed, "onAssistantClosed")) { if (params && "isCancelled" in params) { this.lifecycleObserver.onAssistantClosed(params.isCancelled); } } } }); DeviceEventEmitter.addListener("onAssistantLocaleChanged", (locale) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onAssistantLocaleChanged, "onAssistantLocaleChanged")) { this.lifecycleObserver.onAssistantLocaleChanged(locale); } } }); DeviceEventEmitter.addListener("onUnrecognisedUtterance", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onUnrecognisedUtterance, "onUnrecognisedUtterance")) { if (params && "utterance" in params) { this.lifecycleObserver.onUnrecognisedUtterance(params.utterance); } } } }); DeviceEventEmitter.addListener("onUtteranceDetected", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onUtteranceDetected, "onUtteranceDetected")) { if (params && "utterance" in params) { this.lifecycleObserver.onUtteranceDetected(params.utterance); } } } }); DeviceEventEmitter.addListener("onOnboardingSuccess", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onOnboardingSuccess, "onOnboardingSuccess")) { this.lifecycleObserver.onOnboardingSuccess(); } } }); DeviceEventEmitter.addListener("onOnboardingFailure", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onOnboardingFailure, "onOnboardingFailure")) { this.lifecycleObserver.onOnboardingFailure(); } } }); DeviceEventEmitter.addListener("onMicPermissionDenied", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onMicPermissionDenied, "onMicPermissionDenied")) { this.lifecycleObserver.onMicPermissionDenied(); } } }); DeviceEventEmitter.addListener("onMicPermissionGranted", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onMicPermissionGranted, "onMicPermissionGranted")) { this.lifecycleObserver.onMicPermissionGranted(); } } }); DeviceEventEmitter.addListener("onCoachmarkAction", (params) => { if (this.lifecycleObserver != null) { if (checkFunc(this.lifecycleObserver.onCoachmarkAction, "onCoachmarkAction")) { this.lifecycleObserver.onCoachmarkAction(params); } } }); } //Initializes Slang Retail Assistant initialize(config) { if (!config) config = {}; NativeSlangRetailAssistant.initialize(config); } showTrigger() { NativeSlangRetailAssistant.showTrigger(); } hideTrigger() { NativeSlangRetailAssistant.hideTrigger(); } setGlobalTrigger() { NativeSlangRetailAssistant.setGlobalTrigger(); } setTheme(theme) { NativeSlangRetailAssistant.setTheme(theme); } setBackgroundColorGradient(colors) { NativeSlangRetailAssistant.setBackgroundColorGradient(colors); } setWaveColorGradient(colors) { NativeSlangRetailAssistant.setWaveColorGradient(colors); } setTextColor(color) { NativeSlangRetailAssistant.setTextColor(color); } setSecondaryTextColor(color) { NativeSlangRetailAssistant.setSecondaryTextColor(color); } setTextHighlightColor(color) { NativeSlangRetailAssistant.setTextHighlightColor(color); } setSettingsButtonBackgroundColor(color) { NativeSlangRetailAssistant.setSettingsButtonBackgroundColor(color); } setControlButtonBackgroundColor(color) { NativeSlangRetailAssistant.setControlButtonBackgroundColor(color); } setAppTrigger() { NativeSlangRetailAssistant.setAppTrigger(); } setAction(searchActionHandler, orderActionHandler, navigationActionHandler) { if (searchActionHandler != null) { NativeSlangRetailAssistant.setSearchAction(); this.searchActionHandler = searchActionHandler; } if (orderActionHandler != null || navigationActionHandler != null) { NativeSlangRetailAssistant.setAction(); this.orderActionHandler = orderActionHandler; this.navigationActionHandler = navigationActionHandler; } } setLifecycleObserver(lifecycleObserver) { NativeSlangRetailAssistant.setLifecycleObserver(); this.lifecycleObserver = lifecycleObserver } getActiveSearchJourney() { //This method is called to obtain the current search journey object in the native layer. NativeSlangRetailAssistant.prepareActiveSearchUserJourney(); return searchUserJourney; } getActiveOrderManagementUserJourney() { //This method is called to obtain the current order management journey object in the native layer. NativeSlangRetailAssistant.prepareActiveOrderManagementUserJourney(); return orderUserJourney; } getActiveNavigationUserJourney() { //This method is called to obtain the current active navigation journey object in the native layer. NativeSlangRetailAssistant.prepareActiveNavigationUserJourney(); return navigationUserJourney; } notifyNonVoiceUserJourney(userJourney, retailItem) { NativeSlangRetailAssistant.notifyNonVoiceUserJourney(userJourney, retailItem); } notifyTextSearch(itemName) { NativeSlangRetailAssistant.notifyTextSearch(itemName); } notifyCTREvent(eventInfo) { NativeSlangRetailAssistant.notifyCTREvent(eventInfo); } triggerCoachmark() { NativeSlangRetailAssistant.triggerCoachmark(); } setAppDefaultUserJourney(userJourney) { NativeSlangRetailAssistant.setAppDefaultUserJourney(userJourney); } setAppDefaultSubDomain(appSubDomain) { NativeSlangRetailAssistant.setAppDefaultSubDomain(appSubDomain); } setUserId(userId) { NativeSlangRetailAssistant.setUserId(userId); } setUserProperties(userProperties) { NativeSlangRetailAssistant.setUserProperties(userProperties); } setSearchUserJourneyContextItemBrand(brand) { NativeSlangRetailAssistant.setSearchUserJourneyContextItemBrand(brand); } getSearchUserJourneyContextItemBrand(brand) { return NativeSlangRetailAssistant.getSearchUserJourneyContextItemBrand(); } setSearchUserJourneyContextItemId(itemId) { NativeSlangRetailAssistant.setSearchUserJourneyContextItemId(itemId); } getSearchUserJourneyContextItemId() { return NativeSlangRetailAssistant.getSearchUserJourneyContextItemId(); } setSearchUserJourneyContextItemDescription(itemDescription) { NativeSlangRetailAssistant.setSearchUserJourneyContextItemDescription(itemDescription); } setSearchUserJourneyContextSelectedItemDescription(itemDescription) { NativeSlangRetailAssistant.setSearchUserJourneyContextSelectedItemDescription(itemDescription); } getSearchUserJourneyContextItemDescription() { return NativeSlangRetailAssistant.getSearchUserJourneyContextItemDescription(); } setSearchUserJourneyContextItemCategory(itemCategory) { NativeSlangRetailAssistant.setSearchUserJourneyContextItemCategory(itemCategory); } getSearchUserJourneyContextItemCategory() { return NativeSlangRetailAssistant.getSearchUserJourneyContextItemCategory(); } setSearchUserJourneyContextItemVariant(variants) { NativeSlangRetailAssistant.setSearchUserJourneyContextItemVariant(variants); } getSearchUserJourneyContextItemVariant() { return NativeSlangRetailAssistant.getSearchUserJourneyContextItemVariant(); } setSearchUserJourneyContextItemPrice(minAmount, maxAmount, currency) { NativeSlangRetailAssistant.setSearchUserJourneyContextItemPrice(minAmount, maxAmount, currency); } getSearchUserJourneyContextItemPrice() { return NativeSlangRetailAssistant.getSearchUserJourneyContextItemPrice(); } setSearchUserJourneyContextItemQuantity(amount, unit) { NativeSlangRetailAssistant.setSearchUserJourneyContextItemQuantity(amount, unit); } getSearchUserJourneyContextItemQuantity() { return NativeSlangRetailAssistant.getSearchUserJourneyContextItemQuantity(); } setSearchUserJourneyContextItemSize(amount, unit) { NativeSlangRetailAssistant.setSearchUserJourneyContextItemSize(amount, unit); } getSearchUserJourneyContextItemSize() { return NativeSlangRetailAssistant.getSearchUserJourneyContextItemSize(); } clearSearchUserJourneyContext() { NativeSlangRetailAssistant.clearSearchUserJourneyContext(); } setOrderManagementUserJourneyContextOrderIndex(index) { NativeSlangRetailAssistant.setOrderManagementUserJourneyContextOrderIndex(index); } getOrderManagementUserJourneyContextOrderIndex() { NativeSlangRetailAssistant.getOrderManagementUserJourneyContextOrderIndex(); } clearOrderManagementUserJourneyContext() { NativeSlangRetailAssistant.clearOrderManagementUserJourneyContext(); } clearNavigationUserJourneyContext() { NativeSlangRetailAssistant.clearNavigationUserJourneyContext(); } startConversation() { NativeSlangRetailAssistant.startConversation(); } startConversation(userJourney) { NativeSlangRetailAssistant.startConversation(userJourney); } cancelSession() { NativeSlangRetailAssistant.cancelSession(); } setLocale(locale) { NativeSlangRetailAssistant.setLocale(locale); } disableSearchUserJourneyContext() { NativeSlangRetailAssistant.disableSearchUserJourneyContext(); } enableSearchUserJourneyContext() { NativeSlangRetailAssistant.enableSearchUserJourneyContext(); } disableOrderManagementUserJourneyContext() { NativeSlangRetailAssistant.disableOrderManagementUserJourneyContext(); } disableNavigationUserJourneyContext() { NativeSlangRetailAssistant.disableNavigationUserJourneyContext(); } nudgeUserWithParameters(title, description) { NativeSlangRetailAssistant.nudgeUserWithParameters(title, description); } nudgeUser() { NativeSlangRetailAssistant.nudgeUser(); } removeNudge() { NativeSlangRetailAssistant.removeNudge(); } } export const SlangRetailAssistantBridge = new RetailAssistantBridge();