v4web-components
Version:
Stencil Component Starter
99 lines (95 loc) • 11.1 kB
JavaScript
import { r as registerInstance, c as createEvent, h, g as getElement } from './index-0b720089.js';
const labDsTableCss = ".v4-table{max-width:100%;overflow-x:auto;max-height:32rem;overflow-y:auto}.scroll-customized::-webkit-scrollbar{width:0.5rem;height:0.5rem}.scroll-customized::-webkit-scrollbar-track{background-color:var(--lab-ds-semantic-selectable-color-bg-cloudy);border-radius:var(--lab-ds-semantic-selectable-border-radius-pill)}.scroll-customized::-webkit-scrollbar-thumb{background-color:var(--lab-ds-semantic-selectable-color-primary-default);border-radius:var(--lab-ds-semantic-selectable-border-radius-pill)}.table-loading{margin-top:var(--lab-ds-semantic-container-space-padding-xs)}.table-header{border-radius:var(--lab-ds-semantic-placeholder-border-radius-s)}table{width:100%;border-spacing:0px}table thead th{position:sticky;top:0;z-index:1}.header-right .cell-content.sortable{justify-content:end}.cell-content.sortable.cell-number{justify-content:end}.header-cell:first-child{border-bottom-left-radius:var(--lab-ds-semantic-placeholder-border-radius-s);border-top-left-radius:var(--lab-ds-semantic-placeholder-border-radius-s)}.header-cell:last-child{border-bottom-right-radius:var(--lab-ds-semantic-placeholder-border-radius-s);border-top-right-radius:var(--lab-ds-semantic-placeholder-border-radius-s)}.header-cell{background-color:var(--lab-ds-semantic-selectable-color-bg-cloudy);border-color:var(--lab-ds-semantic-selectable-color-bg-cloudy)}.cell-container{display:flex;align-items:center;color:var(--lab-ds-semantic-color-fg-default);gap:var(--lab-ds-semantic-placeholder-space-gap-s);padding-right:var(--lab-ds-semantic-selectable-space-padding-m);padding-left:var(--lab-ds-semantic-selectable-space-padding-m)}.cell-content{display:flex;align-items:center;justify-content:space-between;width:100%;gap:var(--lab-ds-semantic-placeholder-space-gap-s);padding-top:var(--lab-ds-semantic-selectable-space-padding-sm);padding-bottom:var(--lab-ds-semantic-selectable-space-padding-sm)}.cell-order{display:flex;flex-direction:column}.header-cell .header-title{font:var(--lab-ds-semantic-typography-heading-h6);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cell-row-container-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cell-row-container-avatar{display:flex;align-items:center;gap:var(--lab-ds-semantic-placeholder-space-gap-xs);overflow:hidden}.cell-row-text-icon{display:grid;text-align:right;justify-content:right;color:var(--lab-ds-semantic-color-fg-default)}.cell-row-container{display:flex;align-items:center;justify-content:space-between}.cell-row-components{display:flex;justify-content:center}.cell-row{padding-top:var(--lab-ds-semantic-selectable-space-padding-sm);padding-bottom:var(--lab-ds-semantic-selectable-space-padding-sm);padding-right:var(--lab-ds-semantic-selectable-space-padding-m);padding-left:var(--lab-ds-semantic-selectable-space-padding-m);text-align:center;max-width:3.125rem;border-bottom-style:solid;border-bottom-width:var(--lab-ds-semantic-selectable-border-width-s);border-bottom-color:var(--lab-ds-semantic-selectable-color-border-default)}.cell-row-clickable{cursor:pointer}.cell-row-text{font:var(--lab-ds-semantic-typography-body-none-decoration-p2-regular);color:var(--lab-ds-semantic-color-fg-default)}.cell-row-number{display:flex;justify-content:end;text-align:right;font:var(--lab-ds-semantic-typography-body-none-decoration-p2-regular);color:var(--lab-ds-semantic-color-fg-default)}.row:hover{background-color:var(--lab-ds-semantic-selectable-color-bg-hover)}.row:hover .cell-row{border-bottom-color:rgba(0, 0, 0, 0)}.row:focus{outline-color:var(--lab-ds-semantic-selectable-color-primary-focus);border-radius:var(--lab-ds-semantic-selectable-border-radius-xxs);outline-width:var(--lab-ds-semantic-selectable-border-width-s)}";
const LabDsTable = class {
constructor(hostRef) {
registerInstance(this, hostRef);
this.finalLineNextPage = createEvent(this, "finalLineNextPage", 7);
this.sortAsc = createEvent(this, "sortAsc", 7);
this.sortDesc = createEvent(this, "sortDesc", 7);
this.data = undefined;
this.actionField = false;
this.loading = false;
this.headerPosition = 'left';
this.sortConfig = undefined;
}
handleSortAsc(d) {
if (d === null || d === void 0 ? void 0 : d.sortable) {
if (d.customSort) {
this.sortAsc.emit(d.colKey);
return;
}
this.sortConfig = { key: d.colKey, direction: 'asc' };
}
}
handleSortDesc(d) {
if (d === null || d === void 0 ? void 0 : d.sortable) {
if (d.customSort) {
this.sortDesc.emit(d.colKey);
return;
}
this.sortConfig = { key: d.colKey, direction: 'desc' };
}
}
sortData(sortConfig) {
if (!sortConfig) {
return;
}
const { key, direction } = sortConfig;
this.data.rows.sort((a, b) => {
var _a, _b;
let aSort = ((_a = a[key].number) === null || _a === void 0 ? void 0 : _a.title) ? a[key].number.title : a[key].text.title;
let bSort = ((_b = b[key].number) === null || _b === void 0 ? void 0 : _b.title) ? b[key].number.title : b[key].text.title;
if (direction === 'asc') {
return aSort > bSort ? 1 : -1;
}
if (direction === 'desc') {
return aSort < bSort ? 1 : -1;
}
});
}
componentDidRender() {
const scroll = this.el.querySelector('.v4-table');
scroll.addEventListener('scroll', () => {
if (Math.abs(scroll.scrollHeight - scroll.clientHeight - scroll.scrollTop) < 1) {
this.finalLineNextPage.emit(true);
}
}, {
passive: true,
});
}
render() {
var _a, _b, _c, _d;
return (h("div", { class: `v4-table scroll-customized header-${this.headerPosition}` }, h("table", null, h("thead", null, h("tr", { class: "table-header" }, (_b = (_a = this.data) === null || _a === void 0 ? void 0 : _a.headers) === null || _b === void 0 ? void 0 :
_b.map(d => (h("th", { class: "header-cell" }, this.headerPosition === 'right' || d.type === 'number' ? (h("div", { class: "cell-container" }, d.sortable && (h("div", { class: "cell-order" }, h("lab-ds-icon-selectable", { onClick: () => {
this.handleSortAsc(d);
}, size: "x-small", icon: "expand_less" }), h("lab-ds-icon-selectable", { onClick: () => {
this.handleSortDesc(d);
}, size: "x-small", icon: "expand_more" }))), h("div", { class: `cell-content ${d.type === 'number' ? 'cell-number' : ''} ${d.sortable ? 'sortable' : ''}` }, d.icon && !d.sortable && h("lab-ds-icon-not-selectable", { class: "header-cell-icon", size: "small", icon: d.icon }), h("span", { class: "header-title" }, d.title)))) : (h("div", { class: "cell-container" }, h("div", { class: "cell-content" }, h("span", { class: "header-title" }, d.title), d.icon && !d.sortable && h("lab-ds-icon-not-selectable", { class: "header-cell-icon", size: "small", icon: d.icon })), d.sortable && (h("div", { class: "cell-order" }, h("lab-ds-icon-selectable", { onClick: () => {
this.handleSortAsc(d);
}, size: "x-small", icon: "expand_less" }), h("lab-ds-icon-selectable", { onClick: () => {
this.handleSortDesc(d);
}, size: "x-small", icon: "expand_more" })))))))), this.actionField && h("th", { class: "header-cell" }))), !this.loading && (h("tbody", null, (_d = (_c = this.data) === null || _c === void 0 ? void 0 : _c.rows) === null || _d === void 0 ? void 0 : _d.map((row, index) => {
var _a;
return (h("tr", { key: index, tabIndex: 0, class: "row" }, this.data.headers.map(header => {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
return (h("td", { onClick: e => {
var _a, _b;
if (header.type === 'text' || 'number') {
e.preventDefault();
((_a = row[header.colKey]) === null || _a === void 0 ? void 0 : _a.handleRow) && ((_b = row[header.colKey]) === null || _b === void 0 ? void 0 : _b.handleRow());
}
else {
return;
}
}, style: { width: `${100 / this.data.headers.length}%` }, class: `cell-row ${header.type === 'text' || 'number' ? 'cell-row-clickable' : ''}` }, header.type === 'text' && (h("div", { class: "cell-row-container" }, h("div", { class: "cell-row-container-avatar" }, ((_b = (_a = row[header.colKey]) === null || _a === void 0 ? void 0 : _a.text) === null || _b === void 0 ? void 0 : _b.avatar) && h("lab-ds-avatar", { size: "small", imageSRC: (_d = (_c = row[header.colKey]) === null || _c === void 0 ? void 0 : _c.text) === null || _d === void 0 ? void 0 : _d.avatarImgSRC }), h("div", { class: "cell-row-container-text" }, h("span", { title: ((_f = (_e = row[header.colKey]) === null || _e === void 0 ? void 0 : _e.text) === null || _f === void 0 ? void 0 : _f.title) || '-', class: "cell-row-text" }, ((_h = (_g = row[header.colKey]) === null || _g === void 0 ? void 0 : _g.text) === null || _h === void 0 ? void 0 : _h.title) || '-'))), h("div", { class: "cell-row-text-icon" }, ((_k = (_j = row[header.colKey]) === null || _j === void 0 ? void 0 : _j.text) === null || _k === void 0 ? void 0 : _k.icon) && h("lab-ds-icon-not-selectable", { class: "cell-row-text-icon", icon: (_m = (_l = row[header.colKey]) === null || _l === void 0 ? void 0 : _l.text) === null || _m === void 0 ? void 0 : _m.icon, size: "small" })))), header.type === 'number' && h("span", { class: "cell-row-number" }, ((_p = (_o = row[header.colKey]) === null || _o === void 0 ? void 0 : _o.number) === null || _p === void 0 ? void 0 : _p.title) || '-'), header.type === 'badge' && (h("div", { class: "cell-row-components" }, h("lab-ds-badge", Object.assign({}, (_q = row[header.colKey]) === null || _q === void 0 ? void 0 : _q.badge)))), header.type === 'select' && (h("div", { class: "cell-row-components" }, h("lab-ds-select", Object.assign({ style: { width: '100%' } }, (_r = row[header.colKey]) === null || _r === void 0 ? void 0 : _r.select)))), header.type === 'quantify' && (h("div", { class: "cell-row-components" }, h("lab-ds-quantify", Object.assign({}, (_s = row[header.colKey]) === null || _s === void 0 ? void 0 : _s.quantify)))), header.type === 'customize' && (h("div", { class: "cell-row-components" }, h("div", Object.assign({}, (_u = (_t = row[header.colKey]) === null || _t === void 0 ? void 0 : _t.customize) === null || _u === void 0 ? void 0 : _u.props.props, { innerHTML: (_v = row[header.colKey]) === null || _v === void 0 ? void 0 : _v.customize.component }))))));
}), this.actionField && (h("td", { class: "cell-row" }, h("lab-ds-context-menu", Object.assign({ listPosition: "right" }, (_a = row === null || row === void 0 ? void 0 : row.action) === null || _a === void 0 ? void 0 : _a.action))))));
})))), this.loading && (h("div", { class: "table-loading" }, h("lab-ds-skeleton", null)))));
}
get el() { return getElement(this); }
static get watchers() { return {
"sortConfig": ["sortData"]
}; }
};
LabDsTable.style = labDsTableCss;
export { LabDsTable as lab_ds_table };
//# sourceMappingURL=lab-ds-table.entry.js.map