@noggin/elastic-noggin-sdk
Version:
Elastic Noggin SDK
162 lines (161 loc) • 5.74 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Eno = void 0;
const lodash_1 = require("lodash");
const EnoFactory_1 = require("../EnoFactory");
const constants_1 = __importDefault(require("../constants"));
class Eno {
constructor(proto) {
this.tip = '';
this.sid = '';
(0, lodash_1.merge)(this, (0, lodash_1.cloneDeep)(proto));
}
createDeletedEno(branch) {
const enoFact = new EnoFactory_1.EnoFactory();
enoFact.setProtoToPatch(this);
enoFact.setDeleted(true);
if (branch) {
enoFact.setBranch(branch);
}
return enoFact.makeEno();
}
createSecurityChangedEno(security, branch) {
const enoFact = new EnoFactory_1.EnoFactory();
enoFact.setProtoToPatch(this);
enoFact.setSecurity(security);
if (branch) {
enoFact.setBranch(branch);
}
return enoFact.makeEno();
}
toJson(option = {}) {
const json = Object.create(null);
for (const property of Object.keys(this)) {
if (option && option.propWhiteList && option.propWhiteList.indexOf(property) === -1) {
continue;
}
json[property] = (0, lodash_1.cloneDeep)(this[property]);
}
return json;
}
getBranch() {
return this.serverT ?
this.serverT.branch :
this.clientT ?
this.clientT.branch : null;
}
getType() {
return this.source ? this.source.type : null;
}
getSessionId() {
return this.serverT ? this.serverT.session : null;
}
hasError() {
return !!(this.serverT && this.serverT.error && this.serverT.error.length > 0);
}
getFieldFormula(fieldTip) {
if (this.source && this.source.field) {
const field = this.source.field.filter((f) => f.tip === fieldTip)[0];
return field && field.formula && field.formula.length > 0 ? field.formula[0] : null;
}
return null;
}
getFieldValues(fieldTip, lang = constants_1.default.LANG_DEFAULT) {
if (!this.source || !this.source.field) {
return [];
}
const field = this.source.field.filter((f) => f.tip === fieldTip)[0];
if (!field) {
return [];
}
if (field.value) {
return field.value;
}
if (!field.i18n) {
return [];
}
lang = lang.toLowerCase();
const maybeLang = lang.substr(0, 2);
let maybeLangIndex = null;
let defaultLangIndex = null;
for (let i = 0; i < field.i18n.length; i++) {
if (field.i18n[i].lang === lang) {
return field.i18n[i].value || [];
}
if (maybeLangIndex === null && field.i18n[i].lang.substr(0, 2) === maybeLang) {
maybeLangIndex = i;
}
else if (defaultLangIndex === null && field.i18n[i].lang === constants_1.default.LANG_DEFAULT) {
defaultLangIndex = i;
}
}
if (maybeLangIndex !== null) {
return field.i18n[maybeLangIndex].value || [];
}
if (defaultLangIndex !== null) {
return field.i18n[defaultLangIndex].value || [];
}
return [];
}
getFieldStringValue(fieldTip, lang = constants_1.default.LANG_DEFAULT) {
return this.getFieldValues(fieldTip, lang).join(', ') || null;
}
getFieldNumberValue(fieldTip, lang = constants_1.default.LANG_DEFAULT) {
const values = this.getFieldValues(fieldTip, lang);
if (values.length === 0) {
return null;
}
const numberValue = parseFloat(values[0]);
if (isNaN(numberValue)) {
return null;
}
return numberValue;
}
getFieldBooleanValue(fieldTip, lang = constants_1.default.LANG_DEFAULT) {
const fieldValues = this.getFieldValues(fieldTip, lang);
return fieldValues && fieldValues.length > 0 && fieldValues.filter((value) => value !== 'true').length === 0;
}
getFieldJsonValue(fieldTip) {
const value = this.getFieldValues(fieldTip);
if (value && value.length > 0) {
return JSON.parse(value[0]);
}
return null;
}
getFieldRawI18n(fieldTip) {
const field = this.source.field.filter((f) => f.tip === fieldTip)[0];
if ((0, lodash_1.isArray)(field.i18n)) {
return [...field.i18n];
}
if ((0, lodash_1.isArray)(field.value)) {
return [{ lang: constants_1.default.LANG_DEFAULT, value: field.value }];
}
return [];
}
isContentDiff(eno) {
if (!this.source || !eno.source) {
return true;
}
return this.source.deleted !== eno.source.deleted ||
this.source.type !== eno.source.type ||
this.source.security !== eno.source.security ||
this._isFieldDiff(eno);
}
_isFieldDiff(eno) {
if (!this.source || !this.source.field || !eno.source || !eno.source.field) {
return true;
}
const allFieldTips = (0, lodash_1.union)(this.source.field.map(iField => iField.tip), eno.source.field.map(iField => iField.tip));
for (const fieldTip of allFieldTips) {
const isDiff = !(0, lodash_1.isEqual)(this.getFieldValues(fieldTip), eno.getFieldValues(fieldTip));
if (isDiff) {
return true;
}
}
return false;
}
}
exports.Eno = Eno;