@nanoporetech-digital/components 3.5.1 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/dist/cjs/{date-utils-c581f187.js → date-utils-42fbcb42.js} +5 -3
- package/dist/cjs/date-utils-42fbcb42.js.map +1 -0
- package/dist/cjs/index-41582c2a.js +2 -6
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-datalist_3.cjs.entry.js +10 -5
- package/dist/cjs/nano-datalist_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-date-input.cjs.entry.js +1 -1
- package/dist/cjs/nano-date-picker.cjs.entry.js +1 -1
- package/dist/cjs/nano-demo.cjs.entry.js +3 -2
- package/dist/cjs/nano-demo.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-dropdown.cjs.entry.js +5 -2
- package/dist/cjs/nano-dropdown.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-file-upload.cjs.entry.js +4 -0
- package/dist/cjs/nano-file-upload.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js +1 -2
- package/dist/cjs/nano-global-nav-user-profile_3.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-icon-button.cjs.entry.js +1 -1
- package/dist/cjs/nano-icon-button.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/{nano-tooltip.cjs.entry.js → nano-progress-bar_2.cjs.entry.js} +28 -4
- package/dist/cjs/nano-progress-bar_2.cjs.entry.js.map +1 -0
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js +74 -12
- package/dist/cjs/nano-resize-observe_2.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-sticker.cjs.entry.js +2 -0
- package/dist/cjs/nano-sticker.cjs.entry.js.map +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js +1 -1
- package/dist/cjs/nano-tab-group.cjs.entry.js.map +1 -1
- package/dist/cjs/{nano-table-067e0c12.js → nano-table-b031ec24.js} +164 -84
- package/dist/cjs/nano-table-b031ec24.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +1 -1
- package/dist/cjs/{table.worker-a4d75c46.js → table.worker-dadd1eb0.js} +3 -3
- package/dist/cjs/table.worker-dadd1eb0.js.map +1 -0
- package/dist/{esm/table.worker-e9fb087e.js → cjs/table.worker-e2f9ccfa.js} +1 -1
- package/dist/collection/components/datalist/datalist.js +3 -3
- package/dist/collection/components/datalist/datalist.js.map +1 -1
- package/dist/collection/components/demo/demo.js +3 -2
- package/dist/collection/components/demo/demo.js.map +1 -1
- package/dist/collection/components/dropdown/dropdown.js +5 -2
- package/dist/collection/components/dropdown/dropdown.js.map +1 -1
- package/dist/collection/components/file-upload/file-upload.js +4 -0
- package/dist/collection/components/file-upload/file-upload.js.map +1 -1
- package/dist/collection/components/icon/icon.js +1 -1
- package/dist/collection/components/icon/icon.js.map +1 -1
- package/dist/collection/components/icon-button/icon-button.js +1 -1
- package/dist/collection/components/icon-button/icon-button.js.map +1 -1
- package/dist/collection/components/menu/menu.js +8 -3
- package/dist/collection/components/menu/menu.js.map +1 -1
- package/dist/collection/components/nav-item/nav-item.js +1 -2
- package/dist/collection/components/nav-item/nav-item.js.map +1 -1
- package/dist/collection/components/resize-observe/resize-observe.js +118 -14
- package/dist/collection/components/resize-observe/resize-observe.js.map +1 -1
- package/dist/collection/components/sticker/sticker.js +2 -0
- package/dist/collection/components/sticker/sticker.js.map +1 -1
- package/dist/collection/components/table/table-interface.js.map +1 -1
- package/dist/collection/components/table/table.cell.js +10 -5
- package/dist/collection/components/table/table.cell.js.map +1 -1
- package/dist/collection/components/table/table.css +9 -23
- package/dist/collection/components/table/table.js +227 -88
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.row.js +19 -12
- package/dist/collection/components/table/table.row.js.map +1 -1
- package/dist/collection/components/table/table.store.js +1 -1
- package/dist/collection/components/table/table.store.js.map +1 -1
- package/dist/collection/components/table/table.utils.js +4 -4
- package/dist/collection/components/table/table.utils.js.map +1 -1
- package/dist/collection/components/table/table.worker.js +8 -0
- package/dist/collection/components/table/table.worker.js.map +1 -1
- package/dist/collection/components/tabs/tab-group.js +1 -1
- package/dist/collection/components/tabs/tab-group.js.map +1 -1
- package/dist/collection/components/tooltip/tooltip.js +25 -3
- package/dist/collection/components/tooltip/tooltip.js.map +1 -1
- package/dist/collection/utils/date-utils.js +4 -2
- package/dist/collection/utils/date-utils.js.map +1 -1
- package/dist/collection/utils/testing/index.js +15 -8
- package/dist/collection/utils/testing/index.js.map +1 -1
- package/dist/components/datalist.js +3 -3
- package/dist/components/datalist.js.map +1 -1
- package/dist/components/date-picker.js +4 -2
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dropdown.js +5 -2
- package/dist/components/dropdown.js.map +1 -1
- package/dist/components/icon-button.js +1 -1
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/icon.js.map +1 -1
- package/dist/components/menu.js +8 -3
- package/dist/components/menu.js.map +1 -1
- package/dist/components/nano-demo.js +21 -14
- package/dist/components/nano-demo.js.map +1 -1
- package/dist/components/nano-file-upload.js +4 -0
- package/dist/components/nano-file-upload.js.map +1 -1
- package/dist/components/nano-tab-group.js +1 -1
- package/dist/components/nano-tab-group.js.map +1 -1
- package/dist/components/nav-item.js +1 -2
- package/dist/components/nav-item.js.map +1 -1
- package/dist/components/resize-observe.js +80 -14
- package/dist/components/resize-observe.js.map +1 -1
- package/dist/components/sticker.js +2 -0
- package/dist/components/sticker.js.map +1 -1
- package/dist/components/table.js +187 -98
- package/dist/components/table.js.map +1 -1
- package/dist/components/table.worker.js +1 -1
- package/dist/components/tooltip.js +6 -3
- package/dist/components/tooltip.js.map +1 -1
- package/dist/custom-elements/index.js +277 -116
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/{date-utils-bb82b123.js → date-utils-6b7a6e1f.js} +5 -3
- package/dist/esm/date-utils-6b7a6e1f.js.map +1 -0
- package/dist/esm/index-3c280603.js +2 -6
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-datalist_3.entry.js +10 -5
- package/dist/esm/nano-datalist_3.entry.js.map +1 -1
- package/dist/esm/nano-date-input.entry.js +1 -1
- package/dist/esm/nano-date-picker.entry.js +1 -1
- package/dist/esm/nano-demo.entry.js +3 -2
- package/dist/esm/nano-demo.entry.js.map +1 -1
- package/dist/esm/nano-dropdown.entry.js +5 -2
- package/dist/esm/nano-dropdown.entry.js.map +1 -1
- package/dist/esm/nano-file-upload.entry.js +4 -0
- package/dist/esm/nano-file-upload.entry.js.map +1 -1
- package/dist/esm/nano-global-nav-user-profile_3.entry.js +1 -2
- package/dist/esm/nano-global-nav-user-profile_3.entry.js.map +1 -1
- package/dist/esm/nano-icon-button.entry.js +1 -1
- package/dist/esm/nano-icon-button.entry.js.map +1 -1
- package/dist/esm/nano-icon.entry.js.map +1 -1
- package/dist/esm/{nano-tooltip.entry.js → nano-progress-bar_2.entry.js} +29 -6
- package/dist/esm/nano-progress-bar_2.entry.js.map +1 -0
- package/dist/esm/nano-resize-observe_2.entry.js +74 -12
- package/dist/esm/nano-resize-observe_2.entry.js.map +1 -1
- package/dist/esm/nano-sticker.entry.js +2 -0
- package/dist/esm/nano-sticker.entry.js.map +1 -1
- package/dist/esm/nano-tab-group.entry.js +1 -1
- package/dist/esm/nano-tab-group.entry.js.map +1 -1
- package/dist/esm/{nano-table-95921f46.js → nano-table-74d627a5.js} +164 -84
- package/dist/esm/nano-table-74d627a5.js.map +1 -0
- package/dist/esm/nano-table.entry.js +1 -1
- package/dist/esm/{table.worker-769f1441.js → table.worker-2908df63.js} +3 -3
- package/dist/esm/table.worker-2908df63.js.map +1 -0
- package/dist/{nano-components/p-e9fb087e.js → esm/table.worker-e2f9ccfa.js} +1 -1
- package/dist/nano-components/nano-components.esm.js +1 -1
- package/dist/nano-components/nano-components.esm.js.map +1 -1
- package/dist/nano-components/p-135fed16.entry.js +5 -0
- package/dist/nano-components/p-135fed16.entry.js.map +1 -0
- package/dist/nano-components/{p-2cb4615b.entry.js → p-2a97ef51.entry.js} +2 -2
- package/dist/nano-components/{p-2cb4615b.entry.js.map → p-2a97ef51.entry.js.map} +0 -0
- package/dist/nano-components/{p-751927d1.entry.js → p-3f25fc76.entry.js} +2 -2
- package/dist/nano-components/p-3f25fc76.entry.js.map +1 -0
- package/dist/nano-components/p-5d149792.entry.js +5 -0
- package/dist/nano-components/p-5d149792.entry.js.map +1 -0
- package/dist/nano-components/p-69e5a37d.entry.js.map +1 -1
- package/dist/nano-components/p-6ad194e4.entry.js +5 -0
- package/dist/nano-components/p-6ad194e4.entry.js.map +1 -0
- package/dist/nano-components/{p-46b348b7.entry.js → p-6cb77d5c.entry.js} +2 -2
- package/dist/nano-components/{p-46b348b7.entry.js.map → p-6cb77d5c.entry.js.map} +0 -0
- package/dist/nano-components/{p-85cfb0af.entry.js → p-9a4297e1.entry.js} +2 -2
- package/dist/nano-components/p-9a4297e1.entry.js.map +1 -0
- package/dist/nano-components/{p-d1c8eca4.entry.js → p-b55ffa92.entry.js} +2 -2
- package/dist/nano-components/p-b55ffa92.entry.js.map +1 -0
- package/dist/nano-components/p-cc5e7acb.entry.js +5 -0
- package/dist/nano-components/p-cc5e7acb.entry.js.map +1 -0
- package/dist/nano-components/p-cecb9af1.js +5 -0
- package/dist/nano-components/p-cecb9af1.js.map +1 -0
- package/dist/nano-components/{p-601e18d5.entry.js → p-d5303933.entry.js} +2 -2
- package/dist/nano-components/p-d5303933.entry.js.map +1 -0
- package/dist/nano-components/{p-4f0e14b5.entry.js → p-d565991d.entry.js} +2 -2
- package/dist/nano-components/p-d565991d.entry.js.map +1 -0
- package/dist/nano-components/p-d7ed2d6e.js +5 -0
- package/dist/nano-components/p-d7ed2d6e.js.map +1 -0
- package/dist/nano-components/p-d81d40d9.js +5 -0
- package/dist/nano-components/{p-26905bca.js.map → p-d81d40d9.js.map} +0 -0
- package/dist/nano-components/{p-244223f0.entry.js → p-dc50b93c.entry.js} +2 -2
- package/dist/nano-components/p-dc50b93c.entry.js.map +1 -0
- package/dist/{cjs/table.worker-e9fb087e.js → nano-components/p-e2f9ccfa.js} +1 -1
- package/dist/nano-components/{p-fb12a45d.entry.js → p-f5ee07b3.entry.js} +2 -2
- package/dist/nano-components/{p-fb12a45d.entry.js.map → p-f5ee07b3.entry.js.map} +0 -0
- package/dist/types/components/icon/icon.d.ts +1 -1
- package/dist/types/components/menu/menu.d.ts +1 -0
- package/dist/types/components/resize-observe/resize-observe.d.ts +20 -1
- package/dist/types/components/table/table-interface.d.ts +35 -24
- package/dist/types/components/table/table.cell.d.ts +1 -1
- package/dist/types/components/table/table.d.ts +48 -15
- package/dist/types/components/table/table.row.d.ts +1 -1
- package/dist/types/components/table/table.store.d.ts +1 -1
- package/dist/types/components/table/table.utils.d.ts +1 -1
- package/dist/types/components/table/table.worker.d.ts +3 -3
- package/dist/types/components/tooltip/tooltip.d.ts +5 -0
- package/dist/types/components.d.ts +59 -14
- package/dist/types/utils/date-utils.d.ts +1 -1
- package/docs-json.json +179 -31
- package/docs-vscode.json +26 -3
- package/package.json +2 -2
- package/dist/cjs/date-utils-c581f187.js.map +0 -1
- package/dist/cjs/nano-progress-bar.cjs.entry.js +0 -33
- package/dist/cjs/nano-progress-bar.cjs.entry.js.map +0 -1
- package/dist/cjs/nano-table-067e0c12.js.map +0 -1
- package/dist/cjs/nano-tooltip.cjs.entry.js.map +0 -1
- package/dist/cjs/table.worker-a4d75c46.js.map +0 -1
- package/dist/esm/date-utils-bb82b123.js.map +0 -1
- package/dist/esm/nano-progress-bar.entry.js +0 -29
- package/dist/esm/nano-progress-bar.entry.js.map +0 -1
- package/dist/esm/nano-table-95921f46.js.map +0 -1
- package/dist/esm/nano-tooltip.entry.js.map +0 -1
- package/dist/esm/table.worker-769f1441.js.map +0 -1
- package/dist/nano-components/p-15a60f7e.js +0 -5
- package/dist/nano-components/p-15a60f7e.js.map +0 -1
- package/dist/nano-components/p-244223f0.entry.js.map +0 -1
- package/dist/nano-components/p-26905bca.js +0 -5
- package/dist/nano-components/p-4f0e14b5.entry.js.map +0 -1
- package/dist/nano-components/p-601e18d5.entry.js.map +0 -1
- package/dist/nano-components/p-751927d1.entry.js.map +0 -1
- package/dist/nano-components/p-85cfb0af.entry.js.map +0 -1
- package/dist/nano-components/p-8fc2a38d.js +0 -5
- package/dist/nano-components/p-8fc2a38d.js.map +0 -1
- package/dist/nano-components/p-9e8c9bac.entry.js +0 -5
- package/dist/nano-components/p-9e8c9bac.entry.js.map +0 -1
- package/dist/nano-components/p-a2e38472.entry.js +0 -5
- package/dist/nano-components/p-a2e38472.entry.js.map +0 -1
- package/dist/nano-components/p-b9c8b99f.entry.js +0 -5
- package/dist/nano-components/p-b9c8b99f.entry.js.map +0 -1
- package/dist/nano-components/p-d1c8eca4.entry.js.map +0 -1
- package/dist/nano-components/p-f43d1d8e.entry.js +0 -5
- package/dist/nano-components/p-f43d1d8e.entry.js.map +0 -1
- package/dist/nano-components/p-feb9f164.entry.js +0 -5
- package/dist/nano-components/p-feb9f164.entry.js.map +0 -1
@@ -112,7 +112,7 @@ const createWorkerProxy = (worker, workerMsgId, exportedMethod) => (
|
|
112
112
|
})
|
113
113
|
);
|
114
114
|
|
115
|
-
const workerPromise = Promise.resolve().then(function () { return require('./table.worker-
|
115
|
+
const workerPromise = Promise.resolve().then(function () { return require('./table.worker-dadd1eb0.js'); }).then(m => m.worker);
|
116
116
|
const createWorkerStore = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'createWorkerStore');
|
117
117
|
const syncConfigToWorker = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'syncConfigToWorker');
|
118
118
|
const syncDataToWorker = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'syncDataToWorker');
|
@@ -210,7 +210,7 @@ function storeSetData(host, rows) {
|
|
210
210
|
row[colName] = Number(coerceDate);
|
211
211
|
});
|
212
212
|
row['__index'] = i;
|
213
|
-
row['__uuid'] = math.cyrb53(
|
213
|
+
row['__uuid'] = math.cyrb53(cols.map((c) => row[c.prop]).join());
|
214
214
|
return row;
|
215
215
|
});
|
216
216
|
store.data.state.rows = rows;
|
@@ -272,7 +272,7 @@ function colDataModel(rowIndex, colIndex) {
|
|
272
272
|
const column = columns[colIndex];
|
273
273
|
const prop = column?.prop;
|
274
274
|
const rowModel = rows[rowIndex];
|
275
|
-
const cellModel = rowModel[columns[colIndex].prop];
|
275
|
+
const cellModel = rowModel ? rowModel[columns[colIndex].prop] : '';
|
276
276
|
return {
|
277
277
|
prop,
|
278
278
|
cellModel,
|
@@ -289,9 +289,9 @@ function colDataModel(rowIndex, colIndex) {
|
|
289
289
|
function rowDataModel(rowIndex) {
|
290
290
|
const store = fetchStores();
|
291
291
|
const rows = store.data.state.rows;
|
292
|
-
const
|
292
|
+
const rowModel = rows[rowIndex];
|
293
293
|
return {
|
294
|
-
|
294
|
+
rowModel,
|
295
295
|
rowIndex,
|
296
296
|
};
|
297
297
|
}
|
@@ -358,7 +358,7 @@ function mergeCellProperties(rowIndex, colIndex, defaultProps) {
|
|
358
358
|
* @returns - a JSX node
|
359
359
|
*/
|
360
360
|
function colheadFootRender(col) {
|
361
|
-
const tpl = col?.
|
361
|
+
const tpl = col?.columnTemplate;
|
362
362
|
return tpl ? (tpl(index.h, col)) : (index.h(index.Fragment, null, col.title));
|
363
363
|
}
|
364
364
|
const stickyHIOs = new WeakMap();
|
@@ -721,7 +721,7 @@ function cellRender(rowIndex, colIndex) {
|
|
721
721
|
: d;
|
722
722
|
}
|
723
723
|
}
|
724
|
-
return tpl ? (tpl(index.h, model)) : (index.h(index.Fragment, null, model.cellModel?.toString()));
|
724
|
+
return tpl ? (tpl(index.h, model)) : model.cellModel ? (index.h(index.Fragment, null, model.cellModel?.toString())) : ('');
|
725
725
|
}
|
726
726
|
const baseCellClasses = (colIndex, toString = false) => {
|
727
727
|
const store = fetchStores();
|
@@ -738,9 +738,9 @@ const baseCellClasses = (colIndex, toString = false) => {
|
|
738
738
|
return classes;
|
739
739
|
};
|
740
740
|
const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
|
741
|
-
const
|
742
|
-
|
743
|
-
|
741
|
+
const Content = () => nestedContent
|
742
|
+
? nestedContent()
|
743
|
+
: cellRender(rowIndex, colIndex) || (index.h("span", { class: "placeholder" }, "\u00A0"));
|
744
744
|
let CellType = 'td';
|
745
745
|
const store = fetchStores();
|
746
746
|
const column = store.config.state.columns[colIndex];
|
@@ -754,24 +754,37 @@ const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
|
|
754
754
|
: { ...props, scope: 'row' };
|
755
755
|
CellType = 'th';
|
756
756
|
}
|
757
|
+
const ContentWrap = (props) => (index.h("div", { ...props, class: {
|
758
|
+
[`${CSSNAMESPACE}__cell-content`]: true,
|
759
|
+
[`${CSSNAMESPACE}__cell-content--wrap`]: !!column.wrap,
|
760
|
+
} },
|
761
|
+
index.h(Content, null)));
|
757
762
|
return (index.h(CellType
|
758
763
|
// role="gridcell"
|
759
|
-
, { ...props },
|
760
|
-
|
764
|
+
, { ...props }, column.autoTooltip && !column.wrap ? (index.h("nano-resize-observe", { notifyContentFit: "x", onNanoResizeContentFitChange: (e) => (e.target.firstElementChild.disabled =
|
765
|
+
e.detail.x) },
|
766
|
+
index.h("nano-tooltip", { disabled: true, hoist: true },
|
767
|
+
index.h(ContentWrap, null),
|
768
|
+
index.h("span", { slot: "content" },
|
769
|
+
index.h(Content, null))))) : (index.h(ContentWrap, null))));
|
761
770
|
};
|
762
771
|
|
763
|
-
const TableRow = ({ rowRenderer, rowIndex,
|
772
|
+
const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children, utils) => {
|
764
773
|
let extraProps = {};
|
765
|
-
const TableCell = ({ header }, children) => {
|
766
|
-
const cell = index.h("div", { class:
|
774
|
+
const TableCell = ({ header, wrap }, children) => {
|
775
|
+
const cell = (index.h("div", { class: {
|
776
|
+
[`${CSSNAMESPACE}__cell-content`]: true,
|
777
|
+
[`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
|
778
|
+
} }, children));
|
767
779
|
return header ? index.h("th", { scope: "row" }, cell) : index.h("td", null, cell);
|
768
780
|
};
|
769
|
-
if (!
|
781
|
+
if (!rowModel) {
|
770
782
|
const model = rowDataModel(rowIndex);
|
771
|
-
|
783
|
+
rowModel = model.rowModel;
|
772
784
|
}
|
773
785
|
if (rowRenderer?.rowProperties) {
|
774
|
-
extraProps =
|
786
|
+
extraProps =
|
787
|
+
rowRenderer.rowProperties({ rowModel, rowIndex }) || extraProps;
|
775
788
|
}
|
776
789
|
let pinned;
|
777
790
|
if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {
|
@@ -782,15 +795,15 @@ const TableRow = ({ rowRenderer, rowIndex, row, onColumnPinned }, children, util
|
|
782
795
|
const tpl = rowRenderer?.template;
|
783
796
|
if (tpl) {
|
784
797
|
let toRender = tpl(index.h, {
|
785
|
-
renderedRow: (index.h("tr", { ...props, key:
|
786
|
-
|
798
|
+
renderedRow: (index.h("tr", { ...props, key: rowModel.__uuid }, children)),
|
799
|
+
rowModel,
|
787
800
|
rowIndex,
|
788
801
|
}, TableCell);
|
789
802
|
if (Array.isArray(toRender)) {
|
790
803
|
toRender = utils.map(toRender, (node, i) => {
|
791
804
|
if (node.vtag === 'tr') {
|
792
805
|
if (!node.vkey)
|
793
|
-
node.vkey = `${
|
806
|
+
node.vkey = `${rowModel.__uuid}_${i}`;
|
794
807
|
node.vattrs = mergeProperties({ class: headerPinClasses('tr', pinned, true) }, node.vattrs);
|
795
808
|
if (!!node.vchildren) {
|
796
809
|
node.vchildren = utils.map(node.vchildren, (cNode, i) => {
|
@@ -816,15 +829,18 @@ const TableRow = ({ rowRenderer, rowIndex, row, onColumnPinned }, children, util
|
|
816
829
|
}
|
817
830
|
return toRender;
|
818
831
|
}
|
819
|
-
return (index.h("tr", { ...props, key:
|
832
|
+
return (index.h("tr", { ...props, key: rowModel.__uuid }, children));
|
820
833
|
};
|
821
834
|
const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
|
822
835
|
let extraProps = {};
|
823
836
|
if (rowRenderer.rowProperties) {
|
824
837
|
extraProps = rowRenderer.rowProperties() || {};
|
825
838
|
}
|
826
|
-
const TableCell = ({ header }, children) => {
|
827
|
-
const cell = index.h("div", { class:
|
839
|
+
const TableCell = ({ header, wrap }, children) => {
|
840
|
+
const cell = (index.h("div", { class: {
|
841
|
+
[`${CSSNAMESPACE}__cell-content`]: true,
|
842
|
+
[`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
|
843
|
+
} }, children));
|
828
844
|
return header !== false ? index.h("th", { scope: "col" }, cell) : index.h("td", null, cell);
|
829
845
|
};
|
830
846
|
const pinned = rowRenderer.pinned || null;
|
@@ -866,14 +882,14 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
|
|
866
882
|
return index.h("tr", { ...props }, children);
|
867
883
|
};
|
868
884
|
|
869
|
-
const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;width:100%;--max-col-width:clamp(200px,
|
885
|
+
const tableCss = ":host{box-sizing:border-box}*,*::before,*::after{box-sizing:border-box}[hidden]{display:none !important}nano-table{display:block;width:100%;--max-col-width:clamp(200px, 500px, 50vw);--color:var(--nano-color-mediumgrey, #68767e);--font-size:0.87rem;--cell-line-height:1.5;--thead-font-size:0.95rem;--thead-color:#455560;--tfoot-color:#455560;--border-color:#dddbda;--border-style:thin solid var(--border-color);--border-tint-color:#0084a9;--border-tint-style:3px solid var(--border-tint-color);--cell-bg-rgb:var(--nano-color-white-rgb, 255 255 255);--head-bg-rgb:250, 250, 249;--foot-bg-rgb:var(--head-bg-rgb);--th-row-bg-rgb:var(--cell-bg-rgb);--ordered-bg-rgb:var(--nano-color-offwhite-rgb, 249 249 251);--td-padding-start:0.625rem;--td-padding-end:0.625rem;--td-padding-top:0.5rem;--td-padding-bottom:0.4125rem;--th-padding-start:0.625rem;--th-padding-end:0.625rem;--th-padding-top:0.875rem;--th-padding-bottom:0.6875rem;--td-padding-v:var(--td-padding-top) var(--td-padding-bottom);--td-padding-h:var(--td-padding-start) var(--td-padding-end);--th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--th-padding-h:var(--th-padding-start) var(--th-padding-end);--foot-th-padding-v:var(--td-padding-top) var(--td-padding-bottom);--foot-th-padding-h:var(--td-padding-start) var(--td-padding-end);--head-th-padding-v:var(--th-padding-top) var(--th-padding-bottom);--head-th-padding-h:var(--th-padding-start) var(--th-padding-end);--bookend-col-padding:2rem}.nano-tbl{color:var(--color);text-align:start;width:100%;font-size:var(--font-size);border-spacing:0 0;border-collapse:separate;background:rgb(var(--cell-bg-rgb));border-inline-end:1px solid transparent;border-block-start:1px solid transparent;position:relative;z-index:1}.nano-tbl__wrap{display:table;min-width:100%}.nano-tbl__top-anchor{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;position:relative}.nano-tbl__ordered{background-color:var(--ordered-bg);border-inline-start:var(--border-style);border-inline-end:var(--border-style)}.nano-tbl__drag-mask{display:none;position:absolute;inset-block:-2px -2px;z-index:10;opacity:0;transition:0.2s ease opacity}.nano-tbl__drag-mask--start{width:calc(50% + 2px);inset-inline-start:-2px;border-inline-start:2px dashed var(--border-tint-color)}.nano-tbl__drag-mask--end{width:50%;inset-inline-end:0;border-inline-end:2px dashed var(--border-tint-color)}.nano-tbl__drag-mask--active{opacity:1}.nano-tbl__dragging .nano-tbl__drag-mask{display:block}.nano-tbl__drag--start{opacity:0.4}.nano-tbl__dragging .nano-tbl__td,.nano-tbl__dragging .nano-tbl__th{cursor:no-drop}.nano-tbl__dragging .nano-tbl__td .nano-tbl__cell-content,.nano-tbl__dragging .nano-tbl__th .nano-tbl__cell-content{pointer-events:none}.nano-tbl__order-btn{padding:0;border:none;outline:none;font:inherit;background:none;-webkit-appearance:none;appearance:none;color:inherit;display:flex;gap:10px;align-items:center;width:100%}.nano-tbl__status-icons{margin-inline:auto 10px;display:flex;gap:10px}.nano-tbl__progress-bar{font-size:0.2rem;position:sticky;inset-block-start:0;inset-inline:0;z-index:10;transition:scale 0.25s;scale:0;width:100%;height:0}.nano-tbl__progress-bar--show{scale:1;height:auto}.nano-tbl__caption--hide{clip:rect(1px, 1px, 1px, 1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);block-size:1px;inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute}.nano-tbl__td,.nano-tbl__th{line-height:var(--cell-line-height);text-align:start;border-block-start:var(--border-style);max-width:var(--max-col-width);background-color:rgb(var(--cell-bg-rgb))}tbody:first-of-type tr:first-child .nano-tbl__td,tbody:first-of-type tr:first-child .nano-tbl__th{border-block-start:none}tbody:last-of-type tr:last-child .nano-tbl__td,tbody:last-of-type tr:last-child .nano-tbl__th{border-block-end:var(--border-style)}.md .nano-tbl__td:first-child .nano-tbl__cell-content,.md .nano-tbl__th:first-child .nano-tbl__cell-content{padding-inline-start:var(--bookend-col-padding)}.md .nano-tbl__td:last-child .nano-tbl__cell-content,.md .nano-tbl__th:last-child .nano-tbl__cell-content{padding-inline-end:var(--bookend-col-padding)}@media (max-width: 768px){.nano-tbl__td:first-child .nano-tbl__cell-content,.nano-tbl__th:first-child .nano-tbl__cell-content{padding-inline-start:var(--td-padding-start) !important}.nano-tbl__td:last-child .nano-tbl__cell-content,.nano-tbl__th:last-child .nano-tbl__cell-content{padding-inline-end:var(--td-padding-end) !important}}thead .nano-tbl__td,thead .nano-tbl__th{color:var(--thead-color);font-weight:800;background:rgba(var(--head-bg-rgb), 90%);font-size:var(--thead-font-size);border-block-start:none !important;transition:all 0.2s ease}thead .nano-tbl__td .nano-tbl__cell-content,thead .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--head-th-padding-v);padding-inline:var(--head-th-padding-h)}tfoot .nano-tbl__td,tfoot .nano-tbl__th{color:var(--tfoot-color);font-weight:800;border-block-start:none;background:rgba(var(--foot-bg-rgb), 90%);font-size:var(--thead-font-size)}tfoot .nano-tbl__td .nano-tbl__cell-content,tfoot .nano-tbl__th .nano-tbl__cell-content{padding-block:var(--foot-th-padding-v);padding-inline:var(--foot-th-padding-h)}.nano-tbl__td.nano-tbl__ordered,.nano-tbl__th.nano-tbl__ordered{background-color:rgba(var(--ordered-bg-rgb), 0.8) !important}.nano-tbl__cell-content{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-block:var(--td-padding-v);padding-inline:var(--td-padding-h)}.nano-tbl__cell-content--no-result{padding-block:2rem}.nano-tbl__cell-content--wrap{white-space:normal;overflow:visible}.nano-tbl tbody{will-change:scroll-position;opacity:1;transition:0.1s ease opacity;transform:translateZ(0)}.nano-tbl tbody.nano-tbl__inactive{opacity:0}.nano-tbl th[scope=row]{font-weight:800;margin:0}.nano-tbl__pin{position:sticky}.nano-tbl__pin--start{inset-inline:-1px auto;transition:max-width 0.25s ease}.nano-tbl__pin--start::after{content:\"\";position:absolute;inset:0;box-shadow:5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.nano-tbl__pinned--start .nano-tbl__pin--start{z-index:2;max-width:125px !important}.sm .nano-tbl__pinned--start .nano-tbl__pin--start{max-width:var(--max-col-width) !important}.nano-tbl__pinned--start .nano-tbl__pin--start::after{opacity:1}.nano-tbl__pin--end{}.nano-tbl__pin--start+.nano-tbl__pin--end{inset-inline:auto auto}.nano-tbl__pin--start+.nano-tbl__pin--end::after{display:none}.sm .nano-tbl__pin--end{inset-inline:auto -1px !important;max-width:min(50vw, 200px)}.sm .nano-tbl__pin--end::after{display:block !important;content:\"\";position:absolute;inset:0;box-shadow:-5px 1px 4px 0 rgba(0, 0, 0, 0.2);opacity:0;z-index:-1}.sm .nano-tbl__pinned--end .nano-tbl__pin--end::after{opacity:1}.nano-tbl__pin--top{inset-block:-1px auto}.nano-tbl__pinned--top .nano-tbl__pin--top{z-index:4 !important}.nano-tbl__pin--bottom{inset-block:auto -1px}.nano-tbl__pinned--bottom .nano-tbl__pin--bottom{z-index:5 !important}.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--start .nano-tbl__pin--top.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--top.nano-tbl__pinned--end .nano-tbl__pin--top.nano-tbl__pin--end{z-index:6 !important}.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--start .nano-tbl__pin--bottom.nano-tbl__pin--start{z-index:6 !important}.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:5 !important}.nano-tbl__pinned--bottom.nano-tbl__pinned--end .nano-tbl__pin--bottom.nano-tbl__pin--end{z-index:6 !important}.nano-tbl thead tr:last-of-type td,.nano-tbl thead tr:last-of-type th{border-block-end:var(--border-tint-style)}.nano-tbl tfoot tr:first-of-type td,.nano-tbl tfoot tr:first-of-type th{border-block-start:none}.nano-tbl tfoot tr:last-of-type td,.nano-tbl tfoot tr:last-of-type th{border-block-end:var(--border-tint-style)}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:first-of-type th{border-block-start:var(--border-tint-style) !important}.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type td,.nano-tbl__pinned--bottom .nano-tbl tfoot tr.nano-tbl__pin--bottom:last-of-type th{border-block-end:none !important}.nano-tbl .unlimited-width{max-width:none}.nano-tbl__spinner{font-size:1.5rem;transition:scale 0.25s;scale:0;padding:0.5rem;position:absolute;inset-block-end:0;inset-inline-start:calc(50% - 0.75rem);z-index:0}.nano-tbl__spinner--show{scale:1;position:sticky}.nano-tbl nano-skeleton{line-height:var(--cell-line-height)}";
|
870
886
|
|
871
887
|
let id = 0;
|
872
888
|
const Table = class {
|
873
889
|
constructor(hostRef) {
|
874
890
|
index.registerInstance(this, hostRef);
|
875
|
-
this.nanoTblBlockRendered = index.createEvent(this, "nanoTblBlockRendered", 7);
|
876
891
|
this.nanoTblReady = index.createEvent(this, "nanoTblReady", 7);
|
892
|
+
this.nanoTblBlockRendered = index.createEvent(this, "nanoTblBlockRendered", 7);
|
877
893
|
this.nanoTblBeforeSort = index.createEvent(this, "nanoTblBeforeSort", 7);
|
878
894
|
this.nanoTblAfterSort = index.createEvent(this, "nanoTblAfterSort", 7);
|
879
895
|
this.nanoTblColDrag = index.createEvent(this, "nanoTblColDrag", 7);
|
@@ -882,22 +898,33 @@ const Table = class {
|
|
882
898
|
this.nanoTblAfterFilter = index.createEvent(this, "nanoTblAfterFilter", 7);
|
883
899
|
this.nanoTblBeforeSearch = index.createEvent(this, "nanoTblBeforeSearch", 7);
|
884
900
|
this.nanoTblAfterSearch = index.createEvent(this, "nanoTblAfterSearch", 7);
|
901
|
+
this.nanoTblBeforeEdit = index.createEvent(this, "nanoTblBeforeEdit", 7);
|
885
902
|
this.debounceSetLoading = (l) => {
|
886
|
-
this.
|
903
|
+
this.internalLoading = l;
|
887
904
|
};
|
888
905
|
this.renderId = 'tbl-' + id++;
|
889
906
|
this.filters = [];
|
890
907
|
this.currentFilters = '[]';
|
891
908
|
this.currentSort = '';
|
909
|
+
this.measureHeight = 0;
|
892
910
|
this.blockIos = new WeakMap();
|
893
911
|
this.blockHeights = [];
|
894
912
|
this.unitHeight = 0;
|
895
913
|
// Scroll / IO used for hiding / showing blocks
|
896
914
|
this.ignoreIO = true;
|
897
915
|
this._isReady = false;
|
916
|
+
/**
|
917
|
+
* Fired when a column is dragged
|
918
|
+
* @param column
|
919
|
+
*/
|
898
920
|
this.colDrag = (column) => {
|
899
921
|
this.nanoTblColDrag.emit({ column });
|
900
922
|
};
|
923
|
+
/**
|
924
|
+
* Fired when a column is dropped after being dragged
|
925
|
+
* @param fromCol
|
926
|
+
* @param toCol
|
927
|
+
*/
|
901
928
|
this.colDrop = (fromCol, toCol) => {
|
902
929
|
const cols = this.store.config.state.columns;
|
903
930
|
const toIndex = cols.findIndex((col) => col.prop === toCol);
|
@@ -910,7 +937,7 @@ const Table = class {
|
|
910
937
|
});
|
911
938
|
if (dropEvent.defaultPrevented)
|
912
939
|
return;
|
913
|
-
this.
|
940
|
+
this.columns = arrMove(fromIndex, toIndex, cols);
|
914
941
|
};
|
915
942
|
/**
|
916
943
|
* Start a sort - can be cancelled by `preventDefault`
|
@@ -922,7 +949,7 @@ const Table = class {
|
|
922
949
|
// did order change?
|
923
950
|
if (this.currentSort === order + ':' + column)
|
924
951
|
return;
|
925
|
-
this.
|
952
|
+
this._loading = true;
|
926
953
|
const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });
|
927
954
|
if (sortEvent.defaultPrevented)
|
928
955
|
return;
|
@@ -931,13 +958,24 @@ const Table = class {
|
|
931
958
|
this.scrollToTop(element);
|
932
959
|
if (this.customSortFn) {
|
933
960
|
try {
|
934
|
-
await this.customSortFn(column, order);
|
935
|
-
|
961
|
+
const res = await this.customSortFn(column, order);
|
962
|
+
// if the response is 'true', the custom sort did it's thing
|
963
|
+
// handover to finish and stop loading state.
|
964
|
+
// if response is falsey, carry on to do a FE sort
|
965
|
+
if (res === true) {
|
966
|
+
this.sortComplete(order, column);
|
967
|
+
this._loading = false;
|
968
|
+
return;
|
969
|
+
}
|
936
970
|
}
|
937
971
|
catch (e) {
|
972
|
+
// if response errored, stop loading state
|
973
|
+
// clear current sort cache
|
938
974
|
console.warn('custom sort failed', e);
|
975
|
+
this.currentSort = '';
|
976
|
+
this._loading = false;
|
977
|
+
return;
|
939
978
|
}
|
940
|
-
return;
|
941
979
|
}
|
942
980
|
try {
|
943
981
|
await storeSort(this.host, column, order);
|
@@ -948,7 +986,8 @@ const Table = class {
|
|
948
986
|
this.currentSort = '';
|
949
987
|
}
|
950
988
|
finally {
|
951
|
-
this.
|
989
|
+
if (this.blocks.length)
|
990
|
+
this._loading = false;
|
952
991
|
}
|
953
992
|
};
|
954
993
|
/**
|
@@ -961,31 +1000,35 @@ const Table = class {
|
|
961
1000
|
if (!el || this.blockIos.has(el))
|
962
1001
|
return;
|
963
1002
|
const blockIo = new IntersectionObserver(([ioEntry]) => {
|
964
|
-
if (
|
1003
|
+
if (ioEntry.intersectionRatio === 0)
|
965
1004
|
return;
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
|
974
|
-
|
975
|
-
if (this.
|
976
|
-
|
1005
|
+
// This is a bit gross
|
1006
|
+
// The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast
|
1007
|
+
// i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.
|
1008
|
+
// To fix that, we check - for realzies - if the block IS visible.
|
1009
|
+
// BUT that test is not as sensitive to a block being visible via the IO,
|
1010
|
+
// so doesn't always fire if scrolling slowly
|
1011
|
+
// *sigh*
|
1012
|
+
index.readTask(() => {
|
1013
|
+
if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {
|
1014
|
+
if (!this.ignoreIO) {
|
1015
|
+
const potentialBlocks = [
|
977
1016
|
blockIndex,
|
978
1017
|
blockIndex + 1,
|
979
1018
|
Math.max(0, blockIndex - 1),
|
980
1019
|
];
|
981
|
-
this.
|
982
|
-
|
983
|
-
|
984
|
-
}
|
985
|
-
requestAnimationFrame(() => this.setBlockHeight());
|
1020
|
+
if (potentialBlocks.toString() !== this.activeBlocks.toString()) {
|
1021
|
+
this.activeBlocks = potentialBlocks;
|
1022
|
+
this.setBlockHeight();
|
1023
|
+
}
|
986
1024
|
}
|
987
|
-
|
988
|
-
|
1025
|
+
// fire the event regardless
|
1026
|
+
this.nanoTblBlockRendered.emit({
|
1027
|
+
block: blockIndex,
|
1028
|
+
totalBlocks: this.blockElements.length,
|
1029
|
+
});
|
1030
|
+
}
|
1031
|
+
});
|
989
1032
|
}, {
|
990
1033
|
threshold: [0],
|
991
1034
|
root: this.scrollParent === document.scrollingElement
|
@@ -1007,7 +1050,8 @@ const Table = class {
|
|
1007
1050
|
this.type = 'table';
|
1008
1051
|
this.caption = undefined;
|
1009
1052
|
this.showCaption = false;
|
1010
|
-
this.
|
1053
|
+
this.loading = undefined;
|
1054
|
+
this.internalLoading = false;
|
1011
1055
|
this.placeholderSize = 5;
|
1012
1056
|
this.rows = undefined;
|
1013
1057
|
this.columns = [];
|
@@ -1021,26 +1065,25 @@ const Table = class {
|
|
1021
1065
|
this.customSortFn = undefined;
|
1022
1066
|
this.defaultSort = true;
|
1023
1067
|
this.defaultColDraggable = false;
|
1068
|
+
this.virtualTotalItems = 0;
|
1024
1069
|
this.blocks = [];
|
1025
1070
|
this.activeBlocks = [0, 1, 2];
|
1026
|
-
this.measureHeight = 0;
|
1027
1071
|
this.debounceSetLoading = throttle.debounce(this.debounceSetLoading.bind(this), 50);
|
1028
1072
|
}
|
1029
|
-
|
1030
|
-
|
1031
|
-
* or when performing custom filtering or sorting */
|
1032
|
-
get loading() {
|
1033
|
-
return this._loading;
|
1073
|
+
get _loading() {
|
1074
|
+
return this.loading !== undefined ? this.loading : this.internalLoading;
|
1034
1075
|
}
|
1035
|
-
set
|
1076
|
+
set _loading(l) {
|
1077
|
+
if (this.loading !== undefined)
|
1078
|
+
return;
|
1036
1079
|
this.debounceSetLoading(l);
|
1037
1080
|
}
|
1038
1081
|
handleRowsChange() {
|
1039
1082
|
if (!this.rows) {
|
1040
|
-
this.
|
1083
|
+
this._loading = true;
|
1041
1084
|
return;
|
1042
1085
|
}
|
1043
|
-
this.
|
1086
|
+
this._loading = true;
|
1044
1087
|
Promise.resolve(this.rows).then(async (rows) => {
|
1045
1088
|
await storeSetData(this.host, rows);
|
1046
1089
|
// reset everything
|
@@ -1049,7 +1092,7 @@ const Table = class {
|
|
1049
1092
|
await this.columnInit();
|
1050
1093
|
if (!this.isReady)
|
1051
1094
|
this.setInitialBlockDimension();
|
1052
|
-
this.
|
1095
|
+
this._loading = false;
|
1053
1096
|
});
|
1054
1097
|
}
|
1055
1098
|
async handleColsChange() {
|
@@ -1064,6 +1107,9 @@ const Table = class {
|
|
1064
1107
|
handleSearchTermChange() {
|
1065
1108
|
this.searchStart();
|
1066
1109
|
}
|
1110
|
+
virtualTotalItemsChangeHandler() {
|
1111
|
+
this.setBlocks();
|
1112
|
+
}
|
1067
1113
|
/** Remove any column sorts currently applied
|
1068
1114
|
* @returns a promise which resolves when complete */
|
1069
1115
|
async resetSorting() {
|
@@ -1104,11 +1150,25 @@ const Table = class {
|
|
1104
1150
|
this.filters = this.filters.filter((f) => !columnNames.includes(f.prop));
|
1105
1151
|
return this.filterStart();
|
1106
1152
|
}
|
1153
|
+
/** Updates a row model at a given index
|
1154
|
+
* @param row - the row to update.
|
1155
|
+
* *Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property
|
1156
|
+
* - rows are augmented with certain properties to aid with efficient rendering
|
1157
|
+
* @param rowIndex - the row index to insert this row
|
1158
|
+
*/
|
1159
|
+
async updateRow(row, rowIndex) {
|
1160
|
+
this.rows.splice(rowIndex, 1, row);
|
1161
|
+
this.handleRowsChange();
|
1162
|
+
}
|
1107
1163
|
// uses the first 'tr' of an active block as our yard stick
|
1108
1164
|
set measureEle(el) {
|
1109
1165
|
if (!el)
|
1110
1166
|
return;
|
1111
|
-
|
1167
|
+
const potentialHeight = el.getBoundingClientRect().height;
|
1168
|
+
this.measureHeight =
|
1169
|
+
Math.abs(this.measureHeight - potentialHeight) < 5
|
1170
|
+
? this.measureHeight
|
1171
|
+
: potentialHeight;
|
1112
1172
|
this.unitHeight =
|
1113
1173
|
el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;
|
1114
1174
|
}
|
@@ -1154,7 +1214,7 @@ const Table = class {
|
|
1154
1214
|
this.nanoTblAfterSort.emit({ column: column, order });
|
1155
1215
|
}
|
1156
1216
|
async searchStart() {
|
1157
|
-
this.
|
1217
|
+
this._loading = true;
|
1158
1218
|
const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });
|
1159
1219
|
if (sortEvent.defaultPrevented)
|
1160
1220
|
return;
|
@@ -1168,7 +1228,7 @@ const Table = class {
|
|
1168
1228
|
console.warn('search failed', e);
|
1169
1229
|
}
|
1170
1230
|
finally {
|
1171
|
-
this.
|
1231
|
+
this._loading = false;
|
1172
1232
|
}
|
1173
1233
|
}
|
1174
1234
|
async filterStart(filters, additive = true) {
|
@@ -1185,7 +1245,7 @@ const Table = class {
|
|
1185
1245
|
}
|
1186
1246
|
if (this.currentFilters === JSON.stringify(this.filters))
|
1187
1247
|
return;
|
1188
|
-
this.
|
1248
|
+
this._loading = true;
|
1189
1249
|
const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });
|
1190
1250
|
if (sortEvent.defaultPrevented)
|
1191
1251
|
return;
|
@@ -1194,12 +1254,21 @@ const Table = class {
|
|
1194
1254
|
this.scrollToTop();
|
1195
1255
|
if (this.customFilterFn) {
|
1196
1256
|
try {
|
1197
|
-
await this.customFilterFn(this.filters);
|
1198
|
-
|
1257
|
+
const res = await this.customFilterFn(this.filters);
|
1258
|
+
// if the response is 'true', the custom filter did it's thing
|
1259
|
+
// handover to finish and stop loading state.
|
1260
|
+
// if response is falsey, carry on to do a FE filter
|
1261
|
+
if (res === true) {
|
1262
|
+
this.filterComplete();
|
1263
|
+
this._loading = false;
|
1264
|
+
}
|
1199
1265
|
}
|
1200
1266
|
catch (e) {
|
1267
|
+
// if response errored, stop loading state
|
1268
|
+
// clear current sort cache
|
1201
1269
|
console.warn('custom filter failed', e);
|
1202
1270
|
this.currentFilters = '';
|
1271
|
+
this._loading = false;
|
1203
1272
|
}
|
1204
1273
|
return;
|
1205
1274
|
}
|
@@ -1211,7 +1280,7 @@ const Table = class {
|
|
1211
1280
|
console.warn('filter failed', e);
|
1212
1281
|
}
|
1213
1282
|
finally {
|
1214
|
-
this.
|
1283
|
+
this._loading = false;
|
1215
1284
|
}
|
1216
1285
|
}
|
1217
1286
|
filterComplete() {
|
@@ -1299,23 +1368,33 @@ const Table = class {
|
|
1299
1368
|
* These can then be hidden / shown to improve performance.
|
1300
1369
|
*/
|
1301
1370
|
setBlocks() {
|
1302
|
-
|
1371
|
+
const dRows = this.store.data.state.rows;
|
1372
|
+
if (!dRows.length) {
|
1373
|
+
this.blocks = [];
|
1374
|
+
return;
|
1375
|
+
}
|
1303
1376
|
this.ignoreIO = true;
|
1304
1377
|
let i = 1;
|
1305
|
-
const l = this.
|
1378
|
+
const l = this.virtualTotalItems > dRows.length
|
1379
|
+
? this.virtualTotalItems
|
1380
|
+
: dRows.length;
|
1306
1381
|
let rows = [];
|
1307
1382
|
const blocks = [];
|
1308
1383
|
this.blockHeights = [];
|
1309
1384
|
// old skool loop for perf
|
1310
1385
|
for (i; i <= l; i++) {
|
1311
|
-
rows.push(this.store.data.state.rows[i - 1]);
|
1386
|
+
rows.push(this.store.data.state.rows[i - 1] || { __uuid: '' });
|
1312
1387
|
if (i % this.perBlock === 0) {
|
1388
|
+
// assign a UUID for the whole block
|
1389
|
+
// for block diffing
|
1313
1390
|
blocks.push({ rows, __uuid: math.cyrb53(rows.map((b) => b.__uuid).join()) });
|
1314
1391
|
rows = [];
|
1315
1392
|
}
|
1316
1393
|
}
|
1317
|
-
|
1394
|
+
// any leftover rows
|
1395
|
+
if (rows.length) {
|
1318
1396
|
blocks.push({ rows, __uuid: math.cyrb53(rows.map((b) => b.__uuid).join()) });
|
1397
|
+
}
|
1319
1398
|
this.blocks = blocks;
|
1320
1399
|
}
|
1321
1400
|
/**
|
@@ -1342,11 +1421,11 @@ const Table = class {
|
|
1342
1421
|
}
|
1343
1422
|
/** cache the height for all active blocks for later renders */
|
1344
1423
|
setBlockHeight() {
|
1345
|
-
|
1346
|
-
this.
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1424
|
+
this.activeBlocks.forEach((blockIndex) => {
|
1425
|
+
const el = this.blockElements[blockIndex];
|
1426
|
+
if (!el)
|
1427
|
+
return;
|
1428
|
+
index.readTask(() => {
|
1350
1429
|
const height = el.getBoundingClientRect().height;
|
1351
1430
|
// cache height to our block heights array
|
1352
1431
|
// for subsequent renders
|
@@ -1407,15 +1486,15 @@ const Table = class {
|
|
1407
1486
|
sortable: this.defaultSort,
|
1408
1487
|
draggable: this.defaultColDraggable,
|
1409
1488
|
} }),
|
1410
|
-
]))), this._loading && !this.blocks.length && (index.h("tbody", { class: `${CSSNAMESPACE}__active` }, [...Array(10).keys()].map((rowIndex) => (index.h("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (index.h(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: index.h("nano-skeleton", null) })))))))), !this._loading && !this.blocks.length && (index.h("tr", null, index.h("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, index.h("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, index.h("slot", { name: "no-results" }, "No results found"))))), this.blocks.map((block, blockIndex) => (index.h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
|
1489
|
+
]))), this._loading && !this.blocks.length && (index.h("tbody", { class: `${CSSNAMESPACE}__active` }, [...Array(10).keys()].map((rowIndex) => (index.h("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (index.h(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: () => index.h("nano-skeleton", null) })))))))), !this._loading && !this.blocks.length && (index.h("tr", null, index.h("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, index.h("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, index.h("slot", { name: "no-results" }, "No results found"))))), this.blocks.map((block, blockIndex) => (index.h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
|
1411
1490
|
this.blockElements.push(tb);
|
1412
|
-
this.setupBlockIO(tb, blockIndex);
|
1491
|
+
requestAnimationFrame(() => this.setupBlockIO(tb, blockIndex));
|
1413
1492
|
}, class: {
|
1414
1493
|
[`${CSSNAMESPACE}__inactive`]: !this.activeBlocks.includes(blockIndex),
|
1415
1494
|
[`${CSSNAMESPACE}__active`]: this.activeBlocks.includes(blockIndex),
|
1416
1495
|
} }, this.activeBlocks.includes(blockIndex) ? (block.rows.map((row, i) => {
|
1417
1496
|
const rowIndex = blockIndex > 0 ? blockIndex * this.perBlock + i : i;
|
1418
|
-
return (index.h(TableRow, { rowRenderer: this.rowRender,
|
1497
|
+
return (index.h(TableRow, { rowRenderer: this.rowRender, rowModel: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (index.h(TableCell, { rowIndex: rowIndex, colIndex: colIndex })))));
|
1419
1498
|
})) : (index.h("td", { colSpan: this.store.config.state.columns.length, style: {
|
1420
1499
|
height: this.getBlockHeight(blockIndex),
|
1421
1500
|
} }))))), this.showFooter && (index.h("tfoot", null, index.h(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
|
@@ -1432,7 +1511,8 @@ const Table = class {
|
|
1432
1511
|
static get watchers() { return {
|
1433
1512
|
"rows": ["handleRowsChange"],
|
1434
1513
|
"columns": ["handleColsChange"],
|
1435
|
-
"searchTerm": ["handleSearchTermChange"]
|
1514
|
+
"searchTerm": ["handleSearchTermChange"],
|
1515
|
+
"virtualTotalItems": ["virtualTotalItemsChangeHandler"]
|
1436
1516
|
}; }
|
1437
1517
|
};
|
1438
1518
|
Table.style = tableCss;
|
@@ -1440,4 +1520,4 @@ Table.style = tableCss;
|
|
1440
1520
|
exports.Table = Table;
|
1441
1521
|
exports.createWorker = createWorker;
|
1442
1522
|
|
1443
|
-
//# sourceMappingURL=nano-table-
|
1523
|
+
//# sourceMappingURL=nano-table-b031ec24.js.map
|