123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import { _converse } from '@converse/headless/core.js';
- import assignIn from 'lodash-es/assignIn';
- import isEqual from "lodash-es/isEqual.js";
- import isObject from 'lodash-es/isObject';
- import log from '@converse/headless/log';
- import pick from 'lodash-es/pick';
- import u from '@converse/headless/utils/core';
- import { DEFAULT_SETTINGS } from './constants.js';
- import { Events } from '@converse/skeletor/src/events.js';
- import { Model } from '@converse/skeletor/src/model.js';
- import { initStorage } from '@converse/headless/utils/storage.js';
- let app_settings;
- let init_settings = {}; // Container for settings passed in via converse.initialize
- let user_settings; // User settings, populated via api.users.settings
- export function getAppSettings () {
- return app_settings;
- }
- export function initAppSettings (settings) {
- init_settings = settings;
- app_settings = {};
- Object.assign(app_settings, Events);
- // Allow only whitelisted settings to be overwritten via converse.initialize
- const allowed_settings = pick(settings, Object.keys(DEFAULT_SETTINGS));
- assignIn(app_settings, DEFAULT_SETTINGS, allowed_settings);
- }
- export function getInitSettings () {
- return init_settings;
- }
- export function getAppSetting (key) {
- if (Object.keys(DEFAULT_SETTINGS).includes(key)) {
- return app_settings[key];
- }
- }
- export function extendAppSettings (settings) {
- u.merge(DEFAULT_SETTINGS, settings);
- // When updating the settings, we need to avoid overwriting the
- // initialization_settings (i.e. the settings passed in via converse.initialize).
- const allowed_keys = Object.keys(pick(settings,Object.keys(DEFAULT_SETTINGS)));
- const allowed_site_settings = pick(init_settings, allowed_keys);
- const updated_settings = assignIn(pick(settings, allowed_keys), allowed_site_settings);
- u.merge(app_settings, updated_settings);
- }
- export function registerListener (name, func, context) {
- app_settings.on(name, func, context)
- }
- export function unregisterListener (name, func) {
- app_settings.off(name, func);
- }
- export function updateAppSettings (key, val) {
- if (key == null) return this; // eslint-disable-line no-eq-null
- let attrs;
- if (isObject(key)) {
- attrs = key;
- } else if (typeof key === 'string') {
- attrs = {};
- attrs[key] = val;
- }
- const allowed_keys = Object.keys(pick(attrs, Object.keys(DEFAULT_SETTINGS)));
- const changed = {};
- allowed_keys.forEach(k => {
- const val = attrs[k];
- if (!isEqual(app_settings[k], val)) {
- changed[k] = val;
- app_settings[k] = val;
- }
- });
- Object.keys(changed).forEach(k => app_settings.trigger('change:' + k, changed[k]));
- app_settings.trigger('change', changed);
- }
- /**
- * @async
- */
- function initUserSettings () {
- if (!_converse.bare_jid) {
- const msg = "No JID to fetch user settings for";
- log.error(msg);
- throw Error(msg);
- }
- if (!user_settings?.fetched) {
- const id = `converse.user-settings.${_converse.bare_jid}`;
- user_settings = new Model({id});
- initStorage(user_settings, id);
- user_settings.fetched = user_settings.fetch({'promise': true});
- }
- return user_settings.fetched;
- }
- export async function getUserSettings () {
- await initUserSettings();
- return user_settings;
- }
- export async function updateUserSettings (data, options) {
- await initUserSettings();
- return user_settings.save(data, options);
- }
- export async function clearUserSettings () {
- await initUserSettings();
- return user_settings.clear();
- }
|