@siberiaweb/components
Version:
123 lines (122 loc) • 3.26 kB
JavaScript
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");