core-cde
Version:
262 lines • 9.62 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CollectionClearedArg = exports.DataColumnRemovedArg = exports.DataColumnAddedArg = exports.DataColumnCollection = exports.SYSMBOLS = void 0;
const tslib_1 = require("tslib");
const Linq_1 = require("typescript-dotnet-commonjs/System.Linq/Linq");
const LinkedList_1 = (0, tslib_1.__importDefault)(require("typescript-dotnet-commonjs/System/Collections/LinkedList"));
const Events_module_1 = require("../../events/Events.module");
const Data_module_1 = require("../Data.module");
exports.SYSMBOLS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'AA', 'AB', 'AC', 'AD', 'AE', 'AF'];
const MAX_COLUMN_COUMN = 32;
class DataColumnCollection {
constructor(table) {
this._onDataColumnAdded = new Events_module_1.EventDispatcher();
this._onDdataColumnRemoved = new Events_module_1.EventDispatcher();
this._onCollectionCleared = new Events_module_1.EventDispatcher();
this._list = new LinkedList_1.default();
this._table = table;
}
get onDataColumnAdded() {
return this._onDataColumnAdded;
}
get onDataColumnRemoved() {
return this._onDdataColumnRemoved;
}
get onCollectionCleared() {
return this._onCollectionCleared;
}
// static reviver(key: string, value: any): DataColumn | DataColumnCollection {
// if (Utils.isNumber(key)){
// return DataColumn.fromJSON(value);
// }
// return key === '' ? DataColumnCollection.fromJSON(value) : value;
// }
static fromJSON(json) {
if (typeof json === 'string') {
return DataColumnCollection.fromJSON(JSON.parse(json));
}
else {
const obj = JSON.parse(json.colItems);
const realCols = [];
obj.forEach((c) => {
let col;
switch (c.dataType) {
case Data_module_1.DataType.Select: {
col = Data_module_1.DataColumnSelect.createNew(c.name, c.dataType, JSON.parse(c.dataSelect || null));
break;
}
default:
col = Data_module_1.DataColumn.createNew(c.name, c.dataType);
}
;
col.width = c.width;
col.id = c.id;
realCols.push(col);
});
const columns = new DataColumnCollection(null);
const assign = Object.assign(columns, null, {
_list: new LinkedList_1.default(realCols)
});
for (let i = 0; i < assign._list.count; i++) {
assign._list.getNodeAt(i).value.setCollection(assign);
// assign._list.get(i).setCollection(assign);
}
return assign;
}
}
toJSON() {
return Object.assign({}, null, {
colItems: JSON.stringify(this._list.toArray())
});
}
set(index, value) {
this.checkCountAndThrow(this._list.count + 1);
// const retVal = this._list.set(index, value);
const retVal = this._list.getNodeAt(index);
retVal.value = value;
if (retVal.value) {
this.updateIndex(index);
}
return retVal.value ? true : false;
}
get last() {
return this._list.last;
}
insert(index, value) {
this.checkCountAndThrow(this._list.count + 1);
// FIXME
const nodeInsert = this._list.getNodeAt(index);
if (index <= 0) {
this._list.addFirst(value);
}
else if (index >= this._list.count) {
this._list.addLast(value);
}
else {
this._list.addBefore(nodeInsert, value);
}
// this._list.insert(index, value);
this.addColumn(index);
value.setCollection(this);
this.updateIndex(index);
this._onDataColumnAdded.dispatch(new DataColumnAddedArg(value));
}
removeAt(index) {
const column = this._list.getValueAt(index);
const res = this._list.removeAt(index);
if (res) {
this.removeColumn(index);
column.setCollection(null);
this.updateIndex(index);
this._onDdataColumnRemoved.dispatch(new DataColumnRemovedArg(column));
}
return res;
}
add(entry) {
this.checkCountAndThrow(this._list.count + 1);
const e = (0, Linq_1.Enumerable)(this._list);
if (typeof e.where(c => c.name === entry.name).firstOrDefault() !== 'undefined') {
throw new Error(`Колонка с именем ${entry.name} уже существует`);
}
this._list.add(entry);
entry.setCollection(this);
this.addColumn(this._list.count - 1);
this.updateIndex(this._list.count - 1);
this._onDataColumnAdded.dispatch(new DataColumnAddedArg(entry));
return this;
}
remove(entry, max) {
const index = this._list.toArray().indexOf(entry);
const res = this._list.remove(entry, max);
if (index > -1) {
this.removeColumn(index);
entry.setCollection(null);
this.updateIndex(index);
}
if (res > 0) {
this._onDdataColumnRemoved.dispatch(new DataColumnRemovedArg(entry));
}
return res;
}
clear() {
for (let i = 0; i < this._list.count; i++) {
this._list.getValueAt(i).setCollection(null);
}
const res = this._list.clear();
this._table.removeAllRows();
this._onCollectionCleared.dispatch(new CollectionClearedArg());
return res;
}
importEntries(entries) {
const first = this._list.count;
const res = this._list.importEntries(entries);
const last = this._list.count - 1;
for (let i = first; i <= last; i++) {
this.checkCountAndThrow(this._list.count + 1);
this.addColumn(i);
this.onDataColumnAdded.dispatch(new DataColumnAddedArg(this._list.getValueAt(i)));
}
this.updateIndex(first);
return res;
}
toArray() {
return this._list.toArray();
}
get count() {
return this._list.count;
}
get isReadOnly() {
return this._list.isReadOnly;
}
contains(entry) {
return this._list.contains(entry);
}
copyTo(target, index) {
return this._list.copyTo(target, index);
}
getEnumerator() {
return this._list.getEnumerator();
}
get(index) {
var _a;
return (_a = this._list.getNodeAt(index)) === null || _a === void 0 ? void 0 : _a.value;
// return this._list.get(index);
}
getNode(index) {
return this._list.getNodeAt(index);
}
indexOf(item) {
return this._list.toArray().indexOf(item);
// return this._list.indexOf(item);
}
/**
* Возвращает колонку по имени. Если не найдено - возвращает undefined
* @param name Имя колонки
*/
getByName(name) {
const e = (0, Linq_1.Enumerable)(this._list);
const res = e.where((c) => c.name === name).firstOrDefault();
return res;
}
getById(id) {
// return this._list.toArray().find(val => val.id === id);
const e = (0, Linq_1.Enumerable)(this._list);
const res = e.where((c) => c.id === id).firstOrDefault();
return res;
}
/**
* Возвращает индекс колонки по имени. Если не найдено - возвращает -1
* @param name Имя колонки
*/
getOrdinal(name) {
for (let i = 0; i < this._list.count; i++) {
if (this._list.getValueAt(i).name === name) {
// if (this._list.get(i).name === name) {
return i;
}
}
return -1;
}
/*
===== PRIVATE =====
*/
addColumn(index) {
this._table.addRowsItem(index);
}
removeColumn(index) {
this._table.removeRowsItem(index);
}
checkCountAndThrow(count) {
if (count > MAX_COLUMN_COUMN) {
throw new Error(`Превышено максимально допустимое количество колонок в таблице: ${MAX_COLUMN_COUMN}`);
}
}
/**
* Обновляет значения индекса DataColumn после вставки/удаления
* @param start стартовый индекс
*/
updateIndex(start) {
for (let i = start; i < this._list.count; i++) {
const row = this._list.getValueAt(i);
row.index = i;
}
}
}
exports.DataColumnCollection = DataColumnCollection;
class DataColumnAddedArg {
constructor(newColumn) {
this.newColumn = newColumn;
}
}
exports.DataColumnAddedArg = DataColumnAddedArg;
class DataColumnRemovedArg {
constructor(oldColumn) {
this.oldColumn = oldColumn;
}
}
exports.DataColumnRemovedArg = DataColumnRemovedArg;
class CollectionClearedArg {
}
exports.CollectionClearedArg = CollectionClearedArg;
//# sourceMappingURL=DataColumnCollection.js.map