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.

503 lines (418 loc) 13.2 kB
import { Platform } from "react-native"; import { SlangRetailAssistantBridge } from "./rn-bridge"; import SlangConvaTriggerView from './SlangConvaTriggerView' const checkOS = () => { if (Platform.OS === "ios") { console.error("Slang doesn't support IOS yet!"); return false; } return true; }; const checkFunc = (cb, func) => { if (!checkOS()) return false; if (typeof cb === "function") { return true; } return false; }; let searchActionHandler = null; let orderActionHandler = null; let navigationActionHandler = null; class RetailAssistant { initialize = async (config) => { const check = checkOS(); if (!check) return; let { assistantId, apiKey, locale = "en-IN", requestedLocales = ["en-IN"], triggerPosition, triggerStyle, surfaceStyle, enableCustomTrigger, enableStrictMode, onBoardingInfoTitle, onBoardingInfoDescription, brandColor, environment } = config; SlangRetailAssistantBridge.initialize({ assistantId, apiKey, locale, requestedLocales, triggerPosition, triggerStyle, surfaceStyle, enableCustomTrigger, enableStrictMode, onBoardingInfoTitle, onBoardingInfoDescription, brandColor, environment }); } ui = { showTrigger: () => { SlangRetailAssistantBridge.showTrigger(); }, hideTrigger: () => { SlangRetailAssistantBridge.hideTrigger(); }, setGlobalTrigger: () => { SlangRetailAssistantBridge.setGlobalTrigger(); }, setTheme: (theme) => { SlangRetailAssistantBridge.setTheme(theme); }, setBackgroundColorGradient: (colors) => { SlangRetailAssistantBridge.setBackgroundColorGradient(colors); }, setWaveColorGradient: (colors) => { SlangRetailAssistantBridge.setWaveColorGradient(colors); }, setTextColor: (color) => { SlangRetailAssistantBridge.setTextColor(color); }, setSecondaryTextColor: (color) => { SlangRetailAssistantBridge.setSecondaryTextColor(color); }, setTextHighlightColor: (color) => { SlangRetailAssistantBridge.setTextHighlightColor(color); }, setSettingsButtonBackgroundColor: (color) => { SlangRetailAssistantBridge.setSettingsButtonBackgroundColor(color); }, setControlButtonBackgroundColor: (color) => { SlangRetailAssistantBridge.setControlButtonBackgroundColor(color); }, nudgeUser: () => { SlangRetailAssistantBridge.nudgeUser(); }, removeNudge: () => { SlangRetailAssistantBridge.removeNudge(); }, nudgeUserWithParameters: (title, description) => { SlangRetailAssistantBridge.nudgeUserWithParameters(title, description); } } setAction = (action) => { if (checkFunc(action.onSearch, "onSearch")) { searchActionHandler = action.onSearch; } if (checkFunc(action.onOrderManagement, "onOrderManagement")) { orderActionHandler = action.onOrderManagement; } if (checkFunc(action.onNavigation, "onNavigation")) { navigationActionHandler = action.onNavigation; } SlangRetailAssistantBridge.setAction(searchActionHandler, orderActionHandler, navigationActionHandler); } setLifecycleObserver = (lifecycleObserver) => { SlangRetailAssistantBridge.setLifecycleObserver(lifecycleObserver) } setAppDefaultUserJourney = (userJourney) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setAppDefaultUserJourney(userJourney); } setAppDefaultSubDomain = (appSubDomain) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setAppDefaultSubDomain(appSubDomain); } setUserId = (userId) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setUserId(userId); } setUserProperties = (userProperties) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setUserProperties(userProperties); } notifyTextSearch = (itemName) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.notifyTextSearch(itemName); } notifyNonVoiceUserJourney = (userJourney, retailItem) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.notifyNonVoiceUserJourney(userJourney, retailItem); } notifyCTREvent = (eventInfo) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.notifyCTREvent(eventInfo); } triggerCoachmark = () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.triggerCoachmark(); } getActiveSearchJourney = () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getActiveSearchJourney(); } getActiveOrderManagementUserJourney = () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getActiveOrderManagementUserJourney(); } getActiveNavigationUserJourney = () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getActiveNavigationUserJourney(); } startConversation = () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.startConversation(); } startConversation = (userJourney) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.startConversation(userJourney); } cancelSession = () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.cancelSession(); } setLocale = (locale) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setLocale(locale); } } export const SearchUserJourney = { AppState: { UNSUPPORTED: "UNSUPPORTED", WAITING: "WAITING", SEARCH_RESULTS: "SEARCH_RESULTS", ADD_TO_CART: "ADD_TO_CART" }, context: { setItemId: (itemId) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextItemId(itemId); }, getItemId: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getSearchUserJourneyContextItemId(); }, setItemDescription: (itemDescription) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextItemDescription(itemDescription); }, getItemDescription: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getSearchUserJourneyContextItemDescription(); }, setSelectedDescription: (itemDescription) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextSelectedItemDescription(itemDescription); }, setItemBrand: (brand) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextItemBrand(brand); }, getItemBrand: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getSearchUserJourneyContextItemBrand(); }, setItemCategory: (itemCategory) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextItemCategory(itemCategory); }, getItemCategory: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getSearchUserJourneyContextItemCategory(); }, setItemVariants: (variants) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextItemVariant(variants); }, getItemVariants: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getSearchUserJourneyContextItemVariant(); }, setItemPrice: (minAmount, maxAmount, currency) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextItemPrice(minAmount, maxAmount, currency); }, getItemPrice: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getSearchUserJourneyContextItemPrice(); }, setItemSize: (amount, unit) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextItemQuantity(amount, unit); }, getItemSize: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getSearchUserJourneyContextItemSize(); }, setItemQuantity: (amount, unit) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setSearchUserJourneyContextItemQuantity(amount, unit); }, getItemQuantity: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getSearchUserJourneyContextItemQuantity(); }, clear: () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.clearSearchUserJourneyContext(); }, disablePreserveContext: () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.disableSearchUserJourneyContext(); }, enablePreserveContext: () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.enableSearchUserJourneyContext(); } } } export const AssistantUI = { Theme: { DARK: "DARK", LIGHT: "LIGHT" } } export const OrderManagementUserJourney = { AppState: { WAITING: "WAITING", UNSUPPORTED: "UNSUPPORTED", VIEW_ORDER: "VIEW_ORDER", CANCEL_ORDER: "CANCEL_ORDER", }, context: { setOrderIndex: (orderIndex) => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.setOrderManagementUserJourneyContextOrderIndex(orderIndex); }, getOrderIndex: () => { const check = checkOS(); if (!check) return; return SlangRetailAssistantBridge.getOrderManagementUserJourneyContextOrderIndex(); }, clear: () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.clearOrderManagementUserJourneyContext(); }, disablePreserveContext: () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.disableOrderManagementUserJourneyContext(); } } } export const NavigationUserJourney = { AppState: { WAITING: "WAITING", UNSUPPORTED: "UNSUPPORTED", NAVIGATION: "NAVIGATION" }, context: { clear: () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.clearNavigationUserJourneyContext(); }, disablePreserveContext: () => { const check = checkOS(); if (!check) return; SlangRetailAssistantBridge.disableNavigationUserJourneyContext(); } } } export const Item = { Price: { Currency: { UNKNOWN: "UNKNOWN", INR: "INR", USD: "USD" } }, Quantity: { Unit: { UNKNOWN: "UNKNOWN", PACK: "PACK", BOX: "BOX", PIECE: "PIECE", BOTTLE: "BOTTLE" } }, Size: { UNKNOWN: "UNKNOWN", MILLILITRE: "MILLILITRE", LITRE: "LITRE", GRAM: "GRAM", KILOGRAM: "KILOGRAM" } } export const RetailUserJourney = { SEARCH: "retail_search", ORDER_MANAGEMENT: "retail_order_management", NAVIGATION: "retail_navigation" } export const AssistantSubDomain = { GROCERY: "grocery", PHARMACY: "pharmacy", CUSTOM: "custom" } export const AssistantSurfaceStyle = { GRADIENT: "gradient", MINIMAL_CARD: "minimal_card", CARD: "card" } export const AssistantTriggerStyle = { FLAT: "flat", DEFAULT: "default" } export const AssistantUIPosition = { BaseUIPosition: { BOTTOM_LEFT: "BOTTOM_LEFT", CENTER_LEFT: "CENTER_LEFT", CENTER: "CENTER", CENTER_RIGHT: "CENTER_RIGHT", TOP_LEFT: "TOP_LEFT", TOP_RIGHT: "TOP_RIGHT", BOTTOM_RIGHT: "BOTTOM_RIGHT", BOTTOM_CENTER: "BOTTOM_CENTER", TOP_CENTER: "TOP_CENTER", } } export const SlangRetailAssistant = new RetailAssistant(); export default SlangConvaTriggerView;