UNPKG

@siberiaweb/components

Version:
123 lines (122 loc) 3.26 kB
import CSS from "./CSS"; import WebComponent from "@siberiaweb/webcomponent/lib/WebComponent"; /** * Ячейка. * * @template TRecord Тип записи. */ export default class DataCell extends HTMLTableCellElement { /** * Конструктор. */ constructor() { super(); /** * Столбец. */ this._col = null; /** * Строка. */ this._row = null; /** * Признак, что элемент впервые подключен подключен к DOM. */ this.firstConnected = false; this.contentWrapper = this.createContentWrapper(); this.content = this.createContent(); } /** * Создание обертки содержания. */ createContentWrapper() { let wrapper = document.createElement("div"); wrapper.classList.add(CSS.DATA_CELL_CONTENT_WRAPPER); return wrapper; } /** * Создание содержания. */ createContent() { let content = document.createElement("span"); content.classList.add(CSS.DATA_CELL_CONTENT); return content; } /** * Элемент подключен к DOM. */ connectedCallback() { if (!this.firstConnected) { this.firstConnected = true; this.contentWrapper.appendChild(this.content); this.appendChild(this.contentWrapper); } } /** * Получение обертки содержания. */ getContentWrapper() { return this.contentWrapper; } /** * Получение содержания. */ getContent() { return this.content; } /** * Получение столбца. * * @throws Error Если столбец для ячейки не указан. */ get col() { if (this._col === null) { throw new Error("Столбец для ячейки не указан."); } return this._col; } /** * Установка столбца. * * @param value Значение. */ set col(value) { this._col = value; } /** * Получение строки. * * @throws Error Если строка для ячейки не указана. */ get row() { if (this._row === null) { throw new Error("Строка для ячейки не указана."); } return this._row; } /** * Установка строки. * * @param value Значение. */ set row(value) { this._row = value; } /** * Выбор ячейки. */ select() { this.classList.add(CSS.SELECTED_CELL); } /** * Отмена выбора ячейки. */ unselect() { this.classList.remove(CSS.SELECTED_CELL); } } /** * Наименование компонента. */ DataCell.COMPONENT_NAME = "sw-grid-data-cell"; WebComponent.define(DataCell, "td");