69 lines
2.2 KiB
JavaScript
69 lines
2.2 KiB
JavaScript
import semver from 'semver';
|
|||
|
|||
import reduxStore from '../createStore';
|
|||
import database from '../database';
|
|||
import log from '../../utils/log';
|
|||
import { setEnterpriseModules as setEnterpriseModulesAction, clearEnterpriseModules } 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.collections.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 (serverVersion && semver.gte(semver.coerce(serverVersion), '3.1.0')) {
|
|||
// RC 3.1.0
|
|||
const enterpriseModules = await this.methodCallWrapper('license:getModules');
|
|||
if (enterpriseModules) {
|
|||
const serversDB = database.servers;
|
|||
const serversCollection = serversDB.collections.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));
|
|||
}
|