UNPKG

@botonic/react

Version:

Build Chatbots using React

88 lines 3.44 kB
import merge from 'lodash.merge'; import UAParser from 'ua-parser-js'; import { v7 as uuidv7 } from 'uuid'; import { WEBCHAT } from '../constants'; import { timeZoneToCountryCode } from '../time-zone-to-country-code'; import { getProperty } from './objects'; /** * Returns the value of a property defined in bot's theme based on WEBCHAT.CUSTOM_PROPERTIES dictionary. * It gives preference to nested defined properties (e.g.: header.style) over plain properties (e.g.: headerStyle). * If property doesn't exist, returns the defaultValue. */ export const _getThemeProperty = (theme) => (property, defaultValue) => { for (const [key, value] of Object.entries(WEBCHAT.CUSTOM_PROPERTIES)) { if (value === property) { const nestedProperty = getProperty(theme, value); if (nestedProperty !== undefined) return nestedProperty; const plainProperty = getProperty(theme, key); if (plainProperty !== undefined) return plainProperty; return defaultValue; } } return undefined; }; export const createUser = () => { const parser = new UAParser(); const ua = parser.getResult(); let name = `${ua.os.name} ${ua.browser.name}`; if (ua.device && ua.device.type) name = `${ua.device.type} ${name}`; return { id: uuidv7(), name, }; }; export const initSession = (session) => { var _a; if (!session) session = {}; const hasUserId = ((_a = session === null || session === void 0 ? void 0 : session.user) === null || _a === void 0 ? void 0 : _a.id) !== undefined; if (!session.user || Object.keys(session.user).length === 0 || !hasUserId) session.user = !hasUserId ? merge(session.user, createUser()) : createUser(); return session; }; export function updateUserLocaleAndCountry(user) { user.locale = getLocale(user); user.country = getCountry(user); user.system_locale = getSystemLocale(user); return user; } function getLocale(user) { var _a, _b; if (user.locale) { return user.locale; } return ((_a = user.extra_data) === null || _a === void 0 ? void 0 : _a.language) ? (_b = user.extra_data) === null || _b === void 0 ? void 0 : _b.language : navigator.language; } function getCountry(user) { var _a, _b; if (user.country) { return user.country; } const timeZone = Intl.DateTimeFormat().resolvedOptions().timeZone; const userCountry = timeZoneToCountryCode[timeZone]; return ((_a = user.extra_data) === null || _a === void 0 ? void 0 : _a.country) ? (_b = user.extra_data) === null || _b === void 0 ? void 0 : _b.country : userCountry; } function getSystemLocale(user) { if (user.system_locale) { return user.system_locale; } return getLocale(user); } export const shouldKeepSessionOnReload = ({ initialDevSettings, devSettings, }) => !initialDevSettings || (devSettings && devSettings.keepSessionOnReload); //TODO: Review param serverConfig if is of type ServerConfig this never have errorMessage export const getServerErrorMessage = serverConfig => { if (!serverConfig || !serverConfig.errorMessage) return 'Connection issues'; if (typeof serverConfig.errorMessage === 'function') { return serverConfig.errorMessage(); } return serverConfig.errorMessage; }; //# sourceMappingURL=webchat.js.map