UNPKG

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

Version:

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

418 lines (352 loc) 11.3 kB
import { AppState, Platform } from 'react-native'; import { SlangFitnessAssistantBridge } from './rn-bridge'; const checkOS = () => { return true; }; const checkFunc = (cb, func) => { if (!checkOS()) return false; if (typeof cb === "function") { return true; } return false; }; const ui = { showTrigger: () => { SlangFitnessAssistantBridge.showTrigger(); }, hideTrigger: () => { SlangFitnessAssistantBridge.hideTrigger(); }, setTheme: (theme) => { SlangFitnessAssistantBridge.setTheme(theme); }, setMode: (mode) => { SlangFitnessAssistantBridge.setTheme(mode); }, setBackgroundColorGradient: (colors) => { SlangFitnessAssistantBridge.setBackgroundColorGradient(colors); }, setWaveColorGradient: (colors) => { SlangFitnessAssistantBridge.setWaveColorGradient(colors); }, setTextColor: (color) => { SlangFitnessAssistantBridge.setTextColor(color); }, setSecondaryTextColor: (color) => { SlangFitnessAssistantBridge.setSecondaryTextColor(color); }, setTextHighlightColor: (color) => { SlangFitnessAssistantBridge.setTextHighlightColor(color); }, setSettingsButtonBackgroundColor: (color) => { SlangFitnessAssistantBridge.setSettingsButtonBackgroundColor(color); }, setControlButtonBackgroundColor: (color) => { SlangFitnessAssistantBridge.setControlButtonBackgroundColor(color); }, disableLocaleSelection: (disable) =>{ SlangFitnessAssistantBridge.disableLocaleSelection(disable); }, setWaveVelocity: (velocity)=>{ SlangFitnessAssistantBridge.setWaveVelocity(velocity); }, setTriggerSize: (width, height)=>{ SlangFitnessAssistantBridge.setTriggerSize(width, height); }, // eg: image = require('image.jpg') setTriggerImageResource: (image)=>{ SlangFitnessAssistantBridge.setTriggerImageResource(image); } } let foodLoggingActionHandler = (foodInfo, foodLoggingUserJourney) => { }; let navigationActionHandler = (navigationInfo, navigationUserJourney) => { }; let sugarLoggingActionHandler = (sugarInfo, sugarLoggingUserJourney) => { }; let weightLoggingActionHandler = (weightInfo, weightLoggingUserJourney) => { }; const initialize = async (config) => { const check = checkOS(); if (!check) return; let { assistantId, apiKey, requestedLocales = ["en-IN"], defaultLocale = "en-IN", triggerPosition, onBoardingIdentifier, onBoardingInfoTitle, onBoardingInfoDescription, onBoardingInfoTitleSize, onBoardingInfoDescriptionSize, onBoardingPrimaryTitle, onBoardingPrimaryDescription, automaticAppearanceLimit, coachmarkVisibility, enableCustomTrigger, enableStrictMode, disableOnboardingLocaleSelection, disableSurfaceLocaleSelction, disableCoachMark, infoTextColor, accentColor, brandColor, defaultSubdomain, defaultUserJourney, environment, triggerStyle, surfaceStyle } = config; SlangFitnessAssistantBridge.initialize({ assistantId, apiKey, requestedLocales, defaultLocale, triggerPosition, onBoardingIdentifier, onBoardingInfoTitle, onBoardingInfoDescription, onBoardingInfoTitleSize, onBoardingInfoDescriptionSize, onBoardingPrimaryTitle, onBoardingPrimaryDescription, automaticAppearanceLimit, coachmarkVisibility, enableCustomTrigger, enableStrictMode, disableOnboardingLocaleSelection, disableSurfaceLocaleSelction, disableCoachMark, infoTextColor, accentColor, brandColor, defaultSubdomain, defaultUserJourney, environment, triggerStyle, surfaceStyle }); }; const setAction = (action) => { if (checkFunc(action.onFoodLog, "onFoodLog")) { // Get handler from app foodLoggingActionHandler = action.onFoodLog; } if (checkFunc(action.onSugarLog, "onSugarLog")) { // Get handler from app sugarLoggingActionHandler = action.onSugarLog; } if (checkFunc(action.onNavigation, "onNavigation")) { navigationActionHandler = action.onNavigation; } if(checkFunc(action.onWeightLog, "onWeightLog")) { weightLoggingActionHandler = action.onWeightLog; } SlangFitnessAssistantBridge.setAction(foodLoggingActionHandler, sugarLoggingActionHandler, navigationActionHandler, weightLoggingActionHandler); } const setLifecycleObserver = (lifecycleObserver) => { SlangFitnessAssistantBridge.setLifecycleObserver(lifecycleObserver) } const setUserProperties = (userId, userProperties) => { const check = checkOS(); if (!check) return; SlangFitnessAssistantBridge.setUserProperties(userId, userProperties); } const startConversation = (userJourney) => { const check = checkOS(); if (!check) return; SlangFitnessAssistantBridge.startConversation(userJourney); } const setAppDefaultUserJourney = (userJourney) => { const check = checkOS(); if (!check) return; SlangFitnessAssistantBridge.setAppDefaultUserJourney(userJourney); } const getActiveFoodLoggingJourney = () => { const check = checkOS(); if (!check) return; return SlangFitnessAssistantBridge.getActiveFoodLoggingJourney(); } const getActiveSugarLoggingJourney = () => { const check = checkOS(); if (!check) return; return SlangFitnessAssistantBridge.getActiveSugarLoggingJourney(); } const getActiveWeightLoggingJourney = () => { const check = checkOS(); if(!check) return; return SlangFitnessAssistantBridge.getActiveWeightLoggingJourney(); } const cancelSession = () => { const check = checkOS(); if (!check) return; SlangFitnessAssistantBridge.cancelSession(); } const trackCustomEvent = (eventName, eventMetadata) => { const check = checkOS(); if (!check) return; SlangFitnessAssistantBridge.trackCustomEvent(eventName, eventMetadata); } export const FoodLoggingUserJourney = { FoodLoggingCompleteAppState: (condition) => { return [FoodLoggingUserJourney.AppState.FOOD_LOG_COMPLETE, condition]; }, WaitingAppState: () => { return [FoodLoggingUserJourney.AppState.WAITING, ""]; }, UnsupportedAppState: () => { return [FoodLoggingUserJourney.AppState.UNSUPPORTED, ""]; }, AppState: { UNSUPPORTED: "UNSUPPORTED", WAITING: "WAITING", FOOD_LOG_COMPLETE: "FOOD_LOG_COMPLETE" }, AppStateCondition: { SUCCESS: "SUCCESS", FAILURE: "FAILURE", MEAL_TYPE_NOT_SPECIFIED: "MEAL_TYPE_NOT_SPECIFIED", DATE_NOT_SPECIFIED: "DATE_NOT_SPECIFIED", INVALID_DATE_SPECIFIED: "INVALID_DATE_SPECIFIED", TIME_NOT_SPECIFIED: "TIME_NOT_SPECIFIED", FOODS_NOT_SPECIFIED: "FOODS_NOT_SPECIFIED", FOODS_LIST_INCOMPLETE: "FOODS_LIST_INCOMPLETE", FOODS_FOOD_NAME_DISAMBIGUATE: "FOODS_FOOD_NAME_DISAMBIGUATE", CONFIRMATION_BAILOUT:"CONFIRMATION_BAILOUT", CONFIRMATION_REQUIRED:"CONFIRMATION_REQUIRED", VERIFICATION_REQUIRED:"VERIFICATION_REQUIRED" }, context: { setDisambiguationIndex: (index) => { const check = checkOS(); if (!check) return; SlangFitnessAssistantBridge.setDisambiguationIndexInContext(index); }, setFoodInfoAtIndexInContext: (index, foodInfo) => { const check = checkOS(); if (!check) return; SlangFitnessAssistantBridge.setFoodInfoAtIndexInContext(index, foodInfo); } } } export const SugarLoggingUserJourney = { SugarLoggingCompleteAppState: (condition) => { return [SugarLoggingUserJourney.AppState.SUGAR_LOG_COMPLETE, condition]; }, WaitingAppState: () => { return [SugarLoggingUserJourney.AppState.WAITING, ""]; }, UnsupportedAppState: () => { return [SugarLoggingUserJourney.AppState.UNSUPPORTED, ""]; }, AppState: { UNSUPPORTED: "UNSUPPORTED", WAITING: "WAITING", SUGAR_LOG_COMPLETE: "SUGAR_LOG_COMPLETE" }, AppStateCondition: { SUCCESS: "SUCCESS", FAILURE: "FAILURE", SUGAR_LEVEL_REQUIRED: "SUGAR_LEVEL_REQUIRED", DATE_REQUIRED: "DATE_REQUIRED", INVALID_DATE_SPECIFIED: "INVALID_DATE_SPECIFIED", TIME_REQUIRED: "TIME_REQUIRED", CONFIRMATION_BAILOUT:"CONFIRMATION_BAILOUT", CONFIRMATION_REQUIRED:"CONFIRMATION_REQUIRED", VERIFICATION_REQUIRED:"VERIFICATION_REQUIRED" }, context: { } } export const WeightLoggingUserJourney = { WeightLoggingCompleteAppState: (condition) => { return [WeightLoggingUserJourney.AppState.WEIGHT_LOG_COMPLETE, condition]; }, WaitingAppState: () => { return [WeightLoggingUserJourney.AppState.WAITING, ""]; }, UnsupportedAppState: () => { return [WeightLoggingUserJourney.AppState.UNSUPPORTED, ""]; }, AppState: { UNSUPPORTED: "UNSUPPORTED", WAITING: "WAITING", WEIGHT_LOG_COMPLETE: "WEIGHT_LOG_COMPLETE" }, AppStateCondition: { SUCCESS: "SUCCESS", FAILURE: "FAILURE", WEIGHT_REQUIRED: "WEIGHT_REQUIRED", DATE_REQUIRED: "DATE_REQUIRED", INVALID_DATE_SPECIFIED: "INVALID_DATE_SPECIFIED", TIME_REQUIRED: "TIME_REQUIRED", CONFIRMATION_BAILOUT:"CONFIRMATION_BAILOUT", CONFIRMATION_REQUIRED:"CONFIRMATION_REQUIRED", VERIFICATION_REQUIRED:"VERIFICATION_REQUIRED" }, context: { } } export const NavigationUserJourney = { context: { // context setters and getter must go here } } export const AssistantUI = { Theme: { DARK: "DARK", LIGHT: "LIGHT" } } export const FitnessUserJourney = { FOOD_LOGGING: "food_logging", SUGAR_LOGGING: "sugar_logging", WEIGHT_LOGGING: "weight_logging", NAVIGATION: "fitness_navigation" } export const ConfirmationStatus = { UNKNOWN: "UNKNOWN", CONFIRMED: "CONFIRMED", DENIED: "DENIED" } 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 Environment = { STAGING: "STAGING", PRODUCTION: "PRODUCTION" } export const AssistantTriggerStyle = { FLAT: "flat", DEFAULT: "default" } export const AssistantSurfaceStyle = { GRADIENT: "gradient", CARD: "card", MINIMAL_CARD: "minimal_card" } export default { initialize, setAction, setLifecycleObserver, setUserProperties, startConversation, setAppDefaultUserJourney, cancelSession, trackCustomEvent, getActiveFoodLoggingJourney, getActiveSugarLoggingJourney, getActiveWeightLoggingJourney, ui };