Rocket.Chat.ReactNative/app/lib/methods/enterpriseModules.js

68 lines
2.2 KiB
JavaScript

import { compareServerVersion, methods } from '../utils';
import reduxStore from '../createStore';
import database from '../database';
import log from '../../utils/log';
import { clearEnterpriseModules, setEnterpriseModules as setEnterpriseModulesAction } from '../../actions/enterpriseModules';
export const LICENSE_OMNICHANNEL_MOBILE_ENTERPRISE = 'omnichannel-mobile-enterprise';
export const LICENSE_LIVECHAT_ENTERPRISE = 'livechat-enterprise';
export async function setEnterpriseModules() {
try {
const { server: serverId } = reduxStore.getState().server;
const serversDB = database.servers;
const serversCollection = serversDB.get('servers');
let server;
try {
server = await serversCollection.find(serverId);
} catch {
// Server not found
}
if (server?.enterpriseModules) {
reduxStore.dispatch(setEnterpriseModulesAction(server.enterpriseModules.split(',')));
return;
}
reduxStore.dispatch(clearEnterpriseModules());
} catch (e) {
log(e);
}
}
export function getEnterpriseModules() {
return new Promise(async resolve => {
try {
const { version: serverVersion, server: serverId } = reduxStore.getState().server;
if (compareServerVersion(serverVersion, '3.1.0', methods.greaterThanOrEqualTo)) {
// RC 3.1.0
const enterpriseModules = await this.methodCallWrapper('license:getModules');
if (enterpriseModules) {
const serversDB = database.servers;
const serversCollection = serversDB.get('servers');
const server = await serversCollection.find(serverId);
await serversDB.action(async () => {
await server.update(s => {
s.enterpriseModules = enterpriseModules.join(',');
});
});
reduxStore.dispatch(setEnterpriseModulesAction(enterpriseModules));
return resolve();
}
}
reduxStore.dispatch(clearEnterpriseModules());
} catch (e) {
log(e);
}
return resolve();
});
}
export function hasLicense(module) {
const { enterpriseModules } = reduxStore.getState();
return enterpriseModules.includes(module);
}
export function isOmnichannelModuleAvailable() {
const { enterpriseModules } = reduxStore.getState();
return [LICENSE_OMNICHANNEL_MOBILE_ENTERPRISE, LICENSE_LIVECHAT_ENTERPRISE].some(module => enterpriseModules.includes(module));
}