slickgrid
Version:
A lightning fast JavaScript grid/spreadsheet
122 lines (120 loc) • 6.66 kB
JavaScript
"use strict";
(() => {
var __defProp = Object.defineProperty;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
// src/slick.groupitemmetadataprovider.ts
var keyCode = Slick.keyCode, SlickGroup = Slick.Group, Utils = Slick.Utils, SlickGroupItemMetadataProvider = class {
constructor(inputOptions) {
__publicField(this, "pluginName", "GroupItemMetadataProvider");
__publicField(this, "_grid");
__publicField(this, "_options");
__publicField(this, "_defaults", {
checkboxSelect: !1,
checkboxSelectCssClass: "slick-group-select-checkbox",
checkboxSelectPlugin: null,
groupCssClass: "slick-group",
groupTitleCssClass: "slick-group-title",
totalsCssClass: "slick-group-totals",
groupFocusable: !0,
totalsFocusable: !1,
toggleCssClass: "slick-group-toggle",
toggleExpandedCssClass: "expanded",
toggleCollapsedCssClass: "collapsed",
enableExpandCollapse: !0,
groupFormatter: this.defaultGroupCellFormatter.bind(this),
totalsFormatter: this.defaultTotalsCellFormatter.bind(this),
includeHeaderTotals: !1
});
this._options = Utils.extend(!0, {}, this._defaults, inputOptions);
}
/** Getter of SlickGrid DataView object */
get dataView() {
var _a, _b, _c;
return (_c = (_b = (_a = this._grid) == null ? void 0 : _a.getData) == null ? void 0 : _b.call(_a)) != null ? _c : {};
}
getOptions() {
return this._options;
}
setOptions(inputOptions) {
Utils.extend(!0, this._options, inputOptions);
}
defaultGroupCellFormatter(_row, _cell, _value, _columnDef, item) {
var _a;
if (!this._options.enableExpandCollapse)
return item.title;
let indentation = `${item.level * 15}px`, toggleClass = item.collapsed ? this._options.toggleCollapsedCssClass : this._options.toggleExpandedCssClass, containerElm = document.createDocumentFragment();
this._options.checkboxSelect && containerElm.appendChild(Utils.createDomElement("span", { className: `${this._options.checkboxSelectCssClass} ${item.selectChecked ? "checked" : "unchecked"}` })), containerElm.appendChild(Utils.createDomElement("span", {
className: `${this._options.toggleCssClass} ${toggleClass}`,
ariaExpanded: String(!item.collapsed),
style: { marginLeft: indentation }
}));
let groupTitleElm = Utils.createDomElement("span", { className: this._options.groupTitleCssClass || "" });
return groupTitleElm.setAttribute("level", item.level), item.title instanceof HTMLElement ? groupTitleElm.appendChild(item.title) : this._grid.applyHtmlCode(groupTitleElm, (_a = item.title) != null ? _a : ""), containerElm.appendChild(groupTitleElm), containerElm;
}
defaultTotalsCellFormatter(_row, _cell, _value, columnDef, item, grid) {
var _a, _b;
return (_b = (_a = columnDef == null ? void 0 : columnDef.groupTotalsFormatter) == null ? void 0 : _a.call(columnDef, item, columnDef, grid)) != null ? _b : "";
}
init(grid) {
this._grid = grid, this._grid.onClick.subscribe(this.handleGridClick.bind(this)), this._grid.onKeyDown.subscribe(this.handleGridKeyDown.bind(this));
}
destroy() {
this._grid && (this._grid.onClick.unsubscribe(this.handleGridClick.bind(this)), this._grid.onKeyDown.unsubscribe(this.handleGridKeyDown.bind(this)));
}
handleGridClick(e, args) {
let target = e.target, item = this._grid.getDataItem(args.row);
if (item && item instanceof SlickGroup && target.classList.contains(this._options.toggleCssClass || "") && (this.handleDataViewExpandOrCollapse(item), e.stopImmediatePropagation(), e.preventDefault()), item && item instanceof SlickGroup && target.classList.contains(this._options.checkboxSelectCssClass || "")) {
item.selectChecked = !item.selectChecked, target.classList.remove(item.selectChecked ? "unchecked" : "checked"), target.classList.add(item.selectChecked ? "checked" : "unchecked");
let groupIds = item.rows.map((row) => row[this.dataView.getIdProperty()]), currentSelectedIds = this.dataView.getAllSelectedIds() || [], newSelectedIds;
item.selectChecked ? newSelectedIds = [.../* @__PURE__ */ new Set([...currentSelectedIds, ...groupIds])] : newSelectedIds = currentSelectedIds.filter((id) => !groupIds.includes(id)), this.dataView.setSelectedRowIds(newSelectedIds);
}
}
// TODO: add -/+ handling
handleGridKeyDown(e) {
if (this._options.enableExpandCollapse && e.which === keyCode.SPACE) {
let activeCell = this._grid.getActiveCell();
if (activeCell) {
let item = this._grid.getDataItem(activeCell.row);
item && item instanceof SlickGroup && (this.handleDataViewExpandOrCollapse(item), e.stopImmediatePropagation(), e.preventDefault());
}
}
}
handleDataViewExpandOrCollapse(item) {
let range = this._grid.getRenderedRange();
this.dataView.setRefreshHints({
ignoreDiffsBefore: range.top,
ignoreDiffsAfter: range.bottom + 1
}), item.collapsed ? this.dataView.expandGroup(item.groupingKey) : this.dataView.collapseGroup(item.groupingKey);
}
getGroupRowMetadata(item, _row, _cell) {
let groupLevel = item == null ? void 0 : item.level;
return {
selectable: !1,
focusable: this._options.groupFocusable,
cssClasses: `${this._options.groupCssClass} slick-group-level-${groupLevel}`,
formatter: this._options.includeHeaderTotals && this._options.totalsFormatter || void 0,
columns: {
0: {
colspan: this._options.includeHeaderTotals ? "1" : "*",
formatter: this._options.groupFormatter,
editor: null
}
}
};
}
getTotalsRowMetadata(item, _row, _cell) {
var _a;
let groupLevel = (_a = item == null ? void 0 : item.group) == null ? void 0 : _a.level;
return {
selectable: !1,
focusable: this._options.totalsFocusable,
cssClasses: `${this._options.totalsCssClass} slick-group-level-${groupLevel}`,
formatter: this._options.totalsFormatter,
editor: null
};
}
};
window.Slick && (window.Slick.Data = window.Slick.Data || {}, window.Slick.Data.GroupItemMetadataProvider = SlickGroupItemMetadataProvider);
})();
//# sourceMappingURL=slick.groupitemmetadataprovider.js.map