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