@3mo/data-grid
Version:
A data grid web component
46 lines (45 loc) • 1.49 kB
JavaScript
export class DataRecord {
constructor(dataGrid, init) {
this.dataGrid = dataGrid;
Object.assign(this, init);
}
get isSelected() {
return this.dataGrid.selectionController.isSelected(this.data);
}
get isSelectable() {
return this.dataGrid.selectionController.isSelectable(this.data);
}
get detailsOpen() {
return this.dataGrid.detailsController.isOpen(this);
}
get subDataRecords() {
if (!this.dataGrid.subDataGridDataSelector) {
return undefined;
}
if (this._subDataRecords !== undefined) {
return this._subDataRecords;
}
const subData = KeyPath.get(this.data, this.dataGrid.subDataGridDataSelector);
if (!Array.isArray(subData) || !subData.length) {
return undefined;
}
return this._subDataRecords = this.dataGrid.sortingController
.toSortedBy(subData, d => d)
.map(data => new DataRecord(this.dataGrid, { data, level: this.level + 1 }));
}
get flattenedRecords() {
return [
this,
...(this.subDataRecords?.flatMap(r => r.flattenedRecords) ?? [])
];
}
getSubDataByLevel(level) {
return this.subDataRecords?.filter(r => r.level === level);
}
get hasSubData() {
return (this.subDataRecords?.length ?? 0) > 0;
}
get hasDetails() {
return this.dataGrid.detailsController.hasDetail(this);
}
}