UNPKG

core-cde

Version:

262 lines 9.62 kB
"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