core-cde
Version:
110 lines • 3.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.List = void 0;
const Errors_1 = require("../Errors");
const TypeComponent_1 = require("../TypeComponent");
const Text_1 = require("./Text");
class List extends Text_1.Text {
constructor(type, id) {
super(type, id);
/**
* Тип списка
*/
this.types = null;
/**
* Номер позиции в списке
*/
this.counter = 1;
/**
* уровень вложенности
*/
this.level = 1;
}
/**
* Проперка компонента на тип списка
* @param type Тип списка
* @returns true если виджет список
*/
static checkTypeList(type) {
if (!type) {
throw new Errors_1.EmptyParametersError('checkTypeList');
}
return [TypeComponent_1.TypeComponent.listMark, TypeComponent_1.TypeComponent.listNum].includes(type);
}
static down(node) {
if (!(node.value instanceof List)) {
return;
}
if (!node.previous || !(node.previous.value instanceof List) || node.previous.value.type !== TypeComponent_1.TypeComponent.listNum) {
node.value.counter = 1;
if (node.next) {
this.down(node.next);
}
return;
}
if (node.previous.value.level === node.value.level) {
node.value.counter = node.previous.value.counter + 1;
}
if (node.value.level > node.previous.value.level) {
node.value.counter = 1;
}
if (node.value.level < node.previous.value.level) {
const res = this.getNodeCurrentLvl(node, node.value.level);
if (!res) {
node.value.counter = 1;
}
else {
node.value.counter = (res).value.counter + 1;
}
}
// node.value?.$eventChangeState.emit(EventNames.CHANGE_STATE_WIDGET, true);
if (node.next) {
this.down(node.next);
}
}
static isList(type) {
return [TypeComponent_1.TypeComponent.listNum, TypeComponent_1.TypeComponent.listMark].includes(type);
}
static getNodeCurrentLvl(node, level) {
if (!node.previous || (!(node.previous.value instanceof List))) {
return node;
}
if (node.previous.value.level === level) {
return node.previous;
}
else {
return this.getNodeCurrentLvl(node.previous, level);
}
}
/**
* Получить объект класса List из json
* @param json валидная json строка
* @returns объект класса List
*/
static fromJSON(json) {
try {
return Object.assign(new List(null, null), JSON.parse(json));
}
catch (error) {
throw new Errors_1.JsonParseError('List widget');
}
}
/**
* Получить объект для сериализации
* @returns Объект для сериализации
*/
toJSON() {
return Object.assign({}, null, {
id: this.id,
type: this.type,
styles: this.styles,
value: this.value,
textAlign: this.textAlign,
counter: this.counter,
level: this.level,
types: this.types
});
}
}
exports.List = List;
//# sourceMappingURL=List.js.map