@botonic/react
Version:
Build Chatbots using React
100 lines • 3.79 kB
JavaScript
;
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