UNPKG

@true-directive/base

Version:

The set of base classes for the TrueDirective Grid

366 lines (365 loc) 15.2 kB
import { ColumnType, GridPart } from './enums'; import { FilterOperator, Filter } from './filter.class'; import { Summary } from './summary.class'; /** * Grid column. Contains: * - data field, * - caption, * - data type, * - column width, * - width calc params for the columnAutoWidth option, * - calculated column width (when columnAutoWidth option is turned on), * - css-classes for column cells * - column summaries, * - column settings */ var Column = /** @class */ (function () { /** * Сonstructor * @param fieldName Data field to display * @param caption Text for the column header. Если не задано, будет отображено * наименование поля. * @param width Ширина (в заданных единицах измерения) * @param {ColumnType} dataType Тип данных (see [[ColumnType]]). * Если не задано, принимается равным ColumnType.STRING. * @param band='' Заголовок группы колонок * @param format='' Формат вывода значения */ function Column(fieldName, caption, width, type, band, format) { if (caption === void 0) { caption = null; } if (width === void 0) { width = 150; } if (type === void 0) { type = ColumnType.STRING; } if (band === void 0) { band = ''; } if (format === void 0) { format = ''; } this.fieldName = fieldName; this.caption = caption; this.width = width; this.type = type; this.band = band; this.format = format; // -- Параметры автоматического расчета ширины колонки ----------------------- /** * Минимальная ширина в заданных единицах измерения. Ни при каких условиях * ширина колонки не будет меньше заданного здесь значения */ this.autoWidthMin = undefined; /** * Приоритет отображения. Если ширины клиентской части грида не хватает, * чтобы уместить колонку с её минимальным размером, то первыми перестанут * отображаться колонки, приоритет которых минимален. * Если приоритет не задан, то они никогда не перестают отображаться. */ this.autoWidthPriority = 0; // undefined; /** * Фиксированная ширина колонки. Не будет пересчитываться. */ this.autoWidthFixed = false; // -- Settings ------------------------------------------------------- /** * Разрешено ли пользователю изменять ширину колонки */ this.columnResize = true; /** * Разрешено ли пользователю перемещать эту колонку */ this.columnReorder = true; /** * Разрешена ли сортировка по колонке */ this.allowSorting = true; /** * Разрешен ли фильтр по колонке */ this.allowFilter = true; /** * Показывать колонку в таблице, если по ней произведена группировка * (данная опция пока отклчючена) */ this.showIfGrouped = false; /** * Разрешено ли редактирование данных в этой колонке */ this.allowEdit = true; /** * Видимость колонки */ this.visible = true; /** * Список итогов колонки */ this.summaries = []; /** * Признак того, что колонка является временной при перемещении */ this.temp = false; /** * В какой части грида находится колонка. По умолчанию - в основной центральной * части. */ this.fixed = GridPart.CENTER; /** * Ширина при отображении с единицей измерения */ this.displayedWidthU = ''; /** * Ширина заголовка с единицей измерения */ this.displayedHeaderWidth = ''; /** * Отображаемое поле. * Если задано, то вместо заданного в свойстве [fieldName] поля отображается это. * Например, чтобы сортировка и фильтры производились по значению, * а отображалось отформатированное значение. * Также используется, когда к какому-то идентификатору привязано текстовое значение. * При редактировании отображается исходное значение. */ this.displayField = ''; /** * Поле, содержащее ссылку для полей с dataType = ColumnType.REFERENCE */ this.referenceField = ''; /** * Target of the */ this.referenceTarget = ''; /** * Общий класс для всех ячеек колонки */ this.class = ''; /** * Поле, из которого можно получить класс ячейки конкретной строки */ this.classField = ''; /** * Тип компонента, который будет вставлен во все ячейки колонки вместо * значения (см. Cell components) */ this.cellComponentType = null; /** * Тип компонента, который будет использован как редактор для ячеек этой колонки */ this.editorComponentType = null; /** * Тип компонента, который будет использован как фильтр */ this.filterComponentType = null; /** * Чекбокс, находящийся в заголовке отмечен */ this._checked = false; /** * Источник данных для выпадающего списка при редактировании. * Ожидается массив или Observable */ this.optionsData = null; /** * Список колонок выпадающего списка при редактировании * Если не задан, то будет создана одна колонка с полем name. */ this.optionsColumns = null; if (this.caption === null) { this.caption = fieldName; } if (!this.type) { this.type = ColumnType.STRING; } // Default width of column if (!this.width) { this.width = 150; } } Object.defineProperty(Column.prototype, "isChecked", { /** * Узначем, отмечен ли чекбокс в заголовке колонки */ get: function () { return this._checked; }, enumerable: true, configurable: true }); /** * Устанавливаем, отмечен ли чекбокс в заголовке колонки */ Column.prototype.setChecked = function (v) { this._checked = v; }; Object.defineProperty(Column.prototype, "isCheckbox", { /** * Является ли колонка */ get: function () { return this.type === ColumnType.CHECKBOX; }, enumerable: true, configurable: true }); Object.defineProperty(Column.prototype, "isNumeric", { /** * Содержит ли колонка числовые значения */ get: function () { return this.type === ColumnType.NUMBER; }, enumerable: true, configurable: true }); Object.defineProperty(Column.prototype, "isBoolean", { /** * Содержит ли колонка boolean значения */ get: function () { return this.type === ColumnType.BOOLEAN; }, enumerable: true, configurable: true }); Object.defineProperty(Column.prototype, "isText", { /** * Может ли в значении колонки находиться текстовое содержимое * @return True, если может */ get: function () { return this.type === ColumnType.STRING || this.type === ColumnType.REFERENCE || this.type === ColumnType.HTML || this.type === ColumnType.UNSAFE_HTML; }, enumerable: true, configurable: true }); Object.defineProperty(Column.prototype, "canReorder", { /** * Можно ли пользователю менять порядок этой колонки (перетаскивание мышью за * заголовок колонки) * @return True, если можно */ get: function () { if (this.isCheckbox) { return false; } return this.columnReorder; }, enumerable: true, configurable: true }); Object.defineProperty(Column.prototype, "canResize", { /** * Можно ли пользователю менять ширину колонки * @return True, если можно */ get: function () { if (this.isCheckbox) { return false; } return this.columnResize; }, enumerable: true, configurable: true }); /** * Создание фильтра для колонки перед его редактированием. * @param v Значение по умолчанию (берется из выделенной строки, если есть) * @return Фильтр для колонки */ Column.prototype.createFilter = function (v, operator) { if (operator === void 0) { operator = null; } var res = null; var items = []; var value1 = null; var value2 = null; if (this.type === ColumnType.STRING || this.type === ColumnType.REFERENCE || this.type === ColumnType.HTML || this.type === ColumnType.UNSAFE_HTML) { operator = operator !== null ? operator : FilterOperator.CONTAINS; } else { if (this.type === ColumnType.BOOLEAN) { operator = operator !== null ? operator : FilterOperator.SET; } else { operator = operator !== null ? operator : FilterOperator.BETWEEN; } } switch (operator) { case FilterOperator.BETWEEN: case FilterOperator.NOT_BETWEEN: if (Array.isArray(v) && v.length === 2) { value1 = v[0]; value2 = v[1]; } else { value1 = v; value2 = v; } break; case FilterOperator.SET: if (Array.isArray(v)) { items = v; } else { items.push(v); } break; default: value1 = v; value2 = v; } res = new Filter(this.fieldName, operator, value1, value2, items); res.format = this.format; res.caption = this.caption; res.type = this.type; return res; }; /** * Добавление итога по колонке * @param t {SummaryType} Тип суммирования * @return {Summary} Вся необходимая информация для подсчета итогов */ Column.prototype.addSummary = function (t) { this.summaries.push(new Summary(t)); }; /** * Изменение итога по колонке. Добавляет или удаляет или изменяет * итог по колонке. * @param t {SummaryType} Тип суммирования * @param a {Summary} Текущее суммирование. Если не задан, то удаляются все имеющиеся * итоги. Если задано, то это суммирование заменяется на новое, или удаляется в случае, * если тип суммирования не задан */ Column.prototype.setSummary = function (t, a) { if (a === void 0) { a = null; } if (a === null) { // Обнуляем список суммирований this.clearSummaries(); if (t !== null) { this.summaries.push(new Summary(t)); } } else { if (t === null) { // Удаляем this.summaries.splice(this.summaries.indexOf(a), 1); } else { // Меняем a.type = t; } } }; Column.prototype.clearSummaries = function () { this.summaries.splice(0, this.summaries.length); }; /** * Клонирование колонки * @return Возвращает новый instance класса Column с такими же свойствами, что и текущая колонка */ Column.prototype.clone = function () { var res = new Column(this.fieldName, this.caption, this.width, this.type, this.band, this.format); res.allowEdit = this.allowEdit; return res; }; return Column; }()); export { Column };