@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
JavaScript
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;