UNPKG

@botonic/react

Version:

Build Chatbots using React

100 lines 3.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getServerErrorMessage = exports.shouldKeepSessionOnReload = exports.initSession = exports.createUser = exports._getThemeProperty = void 0; exports.updateUserLocaleAndCountry = updateUserLocaleAndCountry; const tslib_1 = require("tslib"); const lodash_merge_1 = tslib_1.__importDefault(require("lodash.merge")); const ua_parser_js_1 = tslib_1.__importDefault(require("ua-parser-js")); const uuid_1 = require("uuid"); const constants_1 = require("../constants"); const i18n_1 = require("./i18n"); const objects_1 = require("./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. */ const _getThemeProperty = (theme) => (property, defaultValue) => { for (const [key, value] of Object.entries(constants_1.WEBCHAT.CUSTOM_PROPERTIES)) { if (value === property) { const nestedProperty = (0, objects_1.getProperty)(theme, value); if (nestedProperty !== undefined) { return nestedProperty; } const plainProperty = (0, objects_1.getProperty)(theme, key); if (plainProperty !== undefined) { return plainProperty; } return defaultValue; } } return undefined; }; exports._getThemeProperty = _getThemeProperty; const createUser = () => { const parser = new ua_parser_js_1.default(); const ua = parser.getResult(); let name = `${ua.os.name} ${ua.browser.name}`; if (ua.device?.type) { name = `${ua.device.type} ${name}`; } return { id: (0, uuid_1.v7)(), name, }; }; exports.createUser = createUser; const initSession = (session) => { if (!session) { session = {}; } const hasUserId = session?.user?.id !== undefined; if (!session.user || Object.keys(session.user).length === 0 || !hasUserId) { session.user = !hasUserId ? (0, lodash_merge_1.default)(session.user, (0, exports.createUser)()) : (0, exports.createUser)(); } return session; }; exports.initSession = initSession; function updateUserLocaleAndCountry(user) { user.locale = getLocale(user); user.country = getCountry(user); user.system_locale = getSystemLocale(user); return user; } function getLocale(user) { if (user.locale) { return (0, i18n_1.normalizeLocale)(user.locale); } const locale = user.extra_data?.language ? user.extra_data?.language : navigator.language; return (0, i18n_1.normalizeLocale)(locale); } function getCountry(user) { if (user.country) { return user.country; } return user.extra_data?.country ? user.extra_data?.country : (0, i18n_1.getCountryFromTimeZone)(); } function getSystemLocale(user) { if (user.system_locale) { return user.system_locale; } return getLocale(user); } const shouldKeepSessionOnReload = ({ initialDevSettings, devSettings, }) => !initialDevSettings || devSettings?.keepSessionOnReload; exports.shouldKeepSessionOnReload = shouldKeepSessionOnReload; //TODO: Review param serverConfig if is of type ServerConfig this never have errorMessage const getServerErrorMessage = serverConfig => { if (!serverConfig || !serverConfig.errorMessage) { return 'Connection issues'; } if (typeof serverConfig.errorMessage === 'function') { return serverConfig.errorMessage(); } return serverConfig.errorMessage; }; exports.getServerErrorMessage = getServerErrorMessage; //# sourceMappingURL=webchat.js.map