@nanoporetech-digital/components 3.5.0 → 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 +31 -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-83e46f68.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-525ec230.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-e2405350.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-739c193f.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-a71989f3.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-e4a28360.entry.js → p-f5ee07b3.entry.js} +2 -2
- package/dist/nano-components/{p-e4a28360.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 +3 -3
- 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-83e46f68.js.map +0 -1
- package/dist/cjs/nano-tooltip.cjs.entry.js.map +0 -1
- package/dist/cjs/table.worker-525ec230.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-e2405350.js.map +0 -1
- package/dist/esm/nano-tooltip.entry.js.map +0 -1
- package/dist/esm/table.worker-739c193f.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-28fdfa6b.js +0 -5
- package/dist/nano-components/p-28fdfa6b.js.map +0 -1
- 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-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-a71989f3.js +0 -5
- 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
@@ -110,7 +110,7 @@ const createWorkerProxy = (worker, workerMsgId, exportedMethod) => (
|
|
110
110
|
})
|
111
111
|
);
|
112
112
|
|
113
|
-
const workerPromise = import('./table.worker-
|
113
|
+
const workerPromise = import('./table.worker-2908df63.js').then(m => m.worker);
|
114
114
|
const createWorkerStore = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'createWorkerStore');
|
115
115
|
const syncConfigToWorker = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'syncConfigToWorker');
|
116
116
|
const syncDataToWorker = /*@__PURE__*/createWorkerProxy(workerPromise, 'stencil.table.worker', 'syncDataToWorker');
|
@@ -208,7 +208,7 @@ function storeSetData(host, rows) {
|
|
208
208
|
row[colName] = Number(coerceDate);
|
209
209
|
});
|
210
210
|
row['__index'] = i;
|
211
|
-
row['__uuid'] = cyrb53(
|
211
|
+
row['__uuid'] = cyrb53(cols.map((c) => row[c.prop]).join());
|
212
212
|
return row;
|
213
213
|
});
|
214
214
|
store.data.state.rows = rows;
|
@@ -270,7 +270,7 @@ function colDataModel(rowIndex, colIndex) {
|
|
270
270
|
const column = columns[colIndex];
|
271
271
|
const prop = column?.prop;
|
272
272
|
const rowModel = rows[rowIndex];
|
273
|
-
const cellModel = rowModel[columns[colIndex].prop];
|
273
|
+
const cellModel = rowModel ? rowModel[columns[colIndex].prop] : '';
|
274
274
|
return {
|
275
275
|
prop,
|
276
276
|
cellModel,
|
@@ -287,9 +287,9 @@ function colDataModel(rowIndex, colIndex) {
|
|
287
287
|
function rowDataModel(rowIndex) {
|
288
288
|
const store = fetchStores();
|
289
289
|
const rows = store.data.state.rows;
|
290
|
-
const
|
290
|
+
const rowModel = rows[rowIndex];
|
291
291
|
return {
|
292
|
-
|
292
|
+
rowModel,
|
293
293
|
rowIndex,
|
294
294
|
};
|
295
295
|
}
|
@@ -356,7 +356,7 @@ function mergeCellProperties(rowIndex, colIndex, defaultProps) {
|
|
356
356
|
* @returns - a JSX node
|
357
357
|
*/
|
358
358
|
function colheadFootRender(col) {
|
359
|
-
const tpl = col?.
|
359
|
+
const tpl = col?.columnTemplate;
|
360
360
|
return tpl ? (tpl(h, col)) : (h(Fragment, null, col.title));
|
361
361
|
}
|
362
362
|
const stickyHIOs = new WeakMap();
|
@@ -719,7 +719,7 @@ function cellRender(rowIndex, colIndex) {
|
|
719
719
|
: d;
|
720
720
|
}
|
721
721
|
}
|
722
|
-
return tpl ? (tpl(h, model)) : (h(Fragment, null, model.cellModel?.toString()));
|
722
|
+
return tpl ? (tpl(h, model)) : model.cellModel ? (h(Fragment, null, model.cellModel?.toString())) : ('');
|
723
723
|
}
|
724
724
|
const baseCellClasses = (colIndex, toString = false) => {
|
725
725
|
const store = fetchStores();
|
@@ -736,9 +736,9 @@ const baseCellClasses = (colIndex, toString = false) => {
|
|
736
736
|
return classes;
|
737
737
|
};
|
738
738
|
const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
|
739
|
-
const
|
740
|
-
|
741
|
-
|
739
|
+
const Content = () => nestedContent
|
740
|
+
? nestedContent()
|
741
|
+
: cellRender(rowIndex, colIndex) || (h("span", { class: "placeholder" }, "\u00A0"));
|
742
742
|
let CellType = 'td';
|
743
743
|
const store = fetchStores();
|
744
744
|
const column = store.config.state.columns[colIndex];
|
@@ -752,24 +752,37 @@ const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
|
|
752
752
|
: { ...props, scope: 'row' };
|
753
753
|
CellType = 'th';
|
754
754
|
}
|
755
|
+
const ContentWrap = (props) => (h("div", { ...props, class: {
|
756
|
+
[`${CSSNAMESPACE}__cell-content`]: true,
|
757
|
+
[`${CSSNAMESPACE}__cell-content--wrap`]: !!column.wrap,
|
758
|
+
} },
|
759
|
+
h(Content, null)));
|
755
760
|
return (h(CellType
|
756
761
|
// role="gridcell"
|
757
|
-
, { ...props },
|
758
|
-
|
762
|
+
, { ...props }, column.autoTooltip && !column.wrap ? (h("nano-resize-observe", { notifyContentFit: "x", onNanoResizeContentFitChange: (e) => (e.target.firstElementChild.disabled =
|
763
|
+
e.detail.x) },
|
764
|
+
h("nano-tooltip", { disabled: true, hoist: true },
|
765
|
+
h(ContentWrap, null),
|
766
|
+
h("span", { slot: "content" },
|
767
|
+
h(Content, null))))) : (h(ContentWrap, null))));
|
759
768
|
};
|
760
769
|
|
761
|
-
const TableRow = ({ rowRenderer, rowIndex,
|
770
|
+
const TableRow = ({ rowRenderer, rowIndex, rowModel, onColumnPinned }, children, utils) => {
|
762
771
|
let extraProps = {};
|
763
|
-
const TableCell = ({ header }, children) => {
|
764
|
-
const cell = h("div", { class:
|
772
|
+
const TableCell = ({ header, wrap }, children) => {
|
773
|
+
const cell = (h("div", { class: {
|
774
|
+
[`${CSSNAMESPACE}__cell-content`]: true,
|
775
|
+
[`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
|
776
|
+
} }, children));
|
765
777
|
return header ? h("th", { scope: "row" }, cell) : h("td", null, cell);
|
766
778
|
};
|
767
|
-
if (!
|
779
|
+
if (!rowModel) {
|
768
780
|
const model = rowDataModel(rowIndex);
|
769
|
-
|
781
|
+
rowModel = model.rowModel;
|
770
782
|
}
|
771
783
|
if (rowRenderer?.rowProperties) {
|
772
|
-
extraProps =
|
784
|
+
extraProps =
|
785
|
+
rowRenderer.rowProperties({ rowModel, rowIndex }) || extraProps;
|
773
786
|
}
|
774
787
|
let pinned;
|
775
788
|
if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {
|
@@ -780,15 +793,15 @@ const TableRow = ({ rowRenderer, rowIndex, row, onColumnPinned }, children, util
|
|
780
793
|
const tpl = rowRenderer?.template;
|
781
794
|
if (tpl) {
|
782
795
|
let toRender = tpl(h, {
|
783
|
-
renderedRow: (h("tr", { ...props, key:
|
784
|
-
|
796
|
+
renderedRow: (h("tr", { ...props, key: rowModel.__uuid }, children)),
|
797
|
+
rowModel,
|
785
798
|
rowIndex,
|
786
799
|
}, TableCell);
|
787
800
|
if (Array.isArray(toRender)) {
|
788
801
|
toRender = utils.map(toRender, (node, i) => {
|
789
802
|
if (node.vtag === 'tr') {
|
790
803
|
if (!node.vkey)
|
791
|
-
node.vkey = `${
|
804
|
+
node.vkey = `${rowModel.__uuid}_${i}`;
|
792
805
|
node.vattrs = mergeProperties({ class: headerPinClasses('tr', pinned, true) }, node.vattrs);
|
793
806
|
if (!!node.vchildren) {
|
794
807
|
node.vchildren = utils.map(node.vchildren, (cNode, i) => {
|
@@ -814,15 +827,18 @@ const TableRow = ({ rowRenderer, rowIndex, row, onColumnPinned }, children, util
|
|
814
827
|
}
|
815
828
|
return toRender;
|
816
829
|
}
|
817
|
-
return (h("tr", { ...props, key:
|
830
|
+
return (h("tr", { ...props, key: rowModel.__uuid }, children));
|
818
831
|
};
|
819
832
|
const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
|
820
833
|
let extraProps = {};
|
821
834
|
if (rowRenderer.rowProperties) {
|
822
835
|
extraProps = rowRenderer.rowProperties() || {};
|
823
836
|
}
|
824
|
-
const TableCell = ({ header }, children) => {
|
825
|
-
const cell = h("div", { class:
|
837
|
+
const TableCell = ({ header, wrap }, children) => {
|
838
|
+
const cell = (h("div", { class: {
|
839
|
+
[`${CSSNAMESPACE}__cell-content`]: true,
|
840
|
+
[`${CSSNAMESPACE}__cell-content--wrap`]: wrap,
|
841
|
+
} }, children));
|
826
842
|
return header !== false ? h("th", { scope: "col" }, cell) : h("td", null, cell);
|
827
843
|
};
|
828
844
|
const pinned = rowRenderer.pinned || null;
|
@@ -864,14 +880,14 @@ const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
|
|
864
880
|
return h("tr", { ...props }, children);
|
865
881
|
};
|
866
882
|
|
867
|
-
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,
|
883
|
+
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)}";
|
868
884
|
|
869
885
|
let id = 0;
|
870
886
|
const Table = class {
|
871
887
|
constructor(hostRef) {
|
872
888
|
registerInstance(this, hostRef);
|
873
|
-
this.nanoTblBlockRendered = createEvent(this, "nanoTblBlockRendered", 7);
|
874
889
|
this.nanoTblReady = createEvent(this, "nanoTblReady", 7);
|
890
|
+
this.nanoTblBlockRendered = createEvent(this, "nanoTblBlockRendered", 7);
|
875
891
|
this.nanoTblBeforeSort = createEvent(this, "nanoTblBeforeSort", 7);
|
876
892
|
this.nanoTblAfterSort = createEvent(this, "nanoTblAfterSort", 7);
|
877
893
|
this.nanoTblColDrag = createEvent(this, "nanoTblColDrag", 7);
|
@@ -880,22 +896,33 @@ const Table = class {
|
|
880
896
|
this.nanoTblAfterFilter = createEvent(this, "nanoTblAfterFilter", 7);
|
881
897
|
this.nanoTblBeforeSearch = createEvent(this, "nanoTblBeforeSearch", 7);
|
882
898
|
this.nanoTblAfterSearch = createEvent(this, "nanoTblAfterSearch", 7);
|
899
|
+
this.nanoTblBeforeEdit = createEvent(this, "nanoTblBeforeEdit", 7);
|
883
900
|
this.debounceSetLoading = (l) => {
|
884
|
-
this.
|
901
|
+
this.internalLoading = l;
|
885
902
|
};
|
886
903
|
this.renderId = 'tbl-' + id++;
|
887
904
|
this.filters = [];
|
888
905
|
this.currentFilters = '[]';
|
889
906
|
this.currentSort = '';
|
907
|
+
this.measureHeight = 0;
|
890
908
|
this.blockIos = new WeakMap();
|
891
909
|
this.blockHeights = [];
|
892
910
|
this.unitHeight = 0;
|
893
911
|
// Scroll / IO used for hiding / showing blocks
|
894
912
|
this.ignoreIO = true;
|
895
913
|
this._isReady = false;
|
914
|
+
/**
|
915
|
+
* Fired when a column is dragged
|
916
|
+
* @param column
|
917
|
+
*/
|
896
918
|
this.colDrag = (column) => {
|
897
919
|
this.nanoTblColDrag.emit({ column });
|
898
920
|
};
|
921
|
+
/**
|
922
|
+
* Fired when a column is dropped after being dragged
|
923
|
+
* @param fromCol
|
924
|
+
* @param toCol
|
925
|
+
*/
|
899
926
|
this.colDrop = (fromCol, toCol) => {
|
900
927
|
const cols = this.store.config.state.columns;
|
901
928
|
const toIndex = cols.findIndex((col) => col.prop === toCol);
|
@@ -908,7 +935,7 @@ const Table = class {
|
|
908
935
|
});
|
909
936
|
if (dropEvent.defaultPrevented)
|
910
937
|
return;
|
911
|
-
this.
|
938
|
+
this.columns = arrMove(fromIndex, toIndex, cols);
|
912
939
|
};
|
913
940
|
/**
|
914
941
|
* Start a sort - can be cancelled by `preventDefault`
|
@@ -920,7 +947,7 @@ const Table = class {
|
|
920
947
|
// did order change?
|
921
948
|
if (this.currentSort === order + ':' + column)
|
922
949
|
return;
|
923
|
-
this.
|
950
|
+
this._loading = true;
|
924
951
|
const sortEvent = this.nanoTblBeforeSort.emit({ column: column, order });
|
925
952
|
if (sortEvent.defaultPrevented)
|
926
953
|
return;
|
@@ -929,13 +956,24 @@ const Table = class {
|
|
929
956
|
this.scrollToTop(element);
|
930
957
|
if (this.customSortFn) {
|
931
958
|
try {
|
932
|
-
await this.customSortFn(column, order);
|
933
|
-
|
959
|
+
const res = await this.customSortFn(column, order);
|
960
|
+
// if the response is 'true', the custom sort did it's thing
|
961
|
+
// handover to finish and stop loading state.
|
962
|
+
// if response is falsey, carry on to do a FE sort
|
963
|
+
if (res === true) {
|
964
|
+
this.sortComplete(order, column);
|
965
|
+
this._loading = false;
|
966
|
+
return;
|
967
|
+
}
|
934
968
|
}
|
935
969
|
catch (e) {
|
970
|
+
// if response errored, stop loading state
|
971
|
+
// clear current sort cache
|
936
972
|
console.warn('custom sort failed', e);
|
973
|
+
this.currentSort = '';
|
974
|
+
this._loading = false;
|
975
|
+
return;
|
937
976
|
}
|
938
|
-
return;
|
939
977
|
}
|
940
978
|
try {
|
941
979
|
await storeSort(this.host, column, order);
|
@@ -946,7 +984,8 @@ const Table = class {
|
|
946
984
|
this.currentSort = '';
|
947
985
|
}
|
948
986
|
finally {
|
949
|
-
this.
|
987
|
+
if (this.blocks.length)
|
988
|
+
this._loading = false;
|
950
989
|
}
|
951
990
|
};
|
952
991
|
/**
|
@@ -959,31 +998,35 @@ const Table = class {
|
|
959
998
|
if (!el || this.blockIos.has(el))
|
960
999
|
return;
|
961
1000
|
const blockIo = new IntersectionObserver(([ioEntry]) => {
|
962
|
-
if (
|
1001
|
+
if (ioEntry.intersectionRatio === 0)
|
963
1002
|
return;
|
964
|
-
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
|
971
|
-
|
972
|
-
|
973
|
-
if (this.
|
974
|
-
|
1003
|
+
// This is a bit gross
|
1004
|
+
// The Intersection Observer (IO) fires in an incorrect order when the scrolling is very fast
|
1005
|
+
// i.e. we go past blocks 3, 2, 1 and land on 0, but 3 can fire as 'intersecting' after 0.
|
1006
|
+
// To fix that, we check - for realzies - if the block IS visible.
|
1007
|
+
// BUT that test is not as sensitive to a block being visible via the IO,
|
1008
|
+
// so doesn't always fire if scrolling slowly
|
1009
|
+
// *sigh*
|
1010
|
+
readTask(() => {
|
1011
|
+
if (this.scrollSpeed < 100 || isInViewport(el, 0.01)) {
|
1012
|
+
if (!this.ignoreIO) {
|
1013
|
+
const potentialBlocks = [
|
975
1014
|
blockIndex,
|
976
1015
|
blockIndex + 1,
|
977
1016
|
Math.max(0, blockIndex - 1),
|
978
1017
|
];
|
979
|
-
this.
|
980
|
-
|
981
|
-
|
982
|
-
}
|
983
|
-
requestAnimationFrame(() => this.setBlockHeight());
|
1018
|
+
if (potentialBlocks.toString() !== this.activeBlocks.toString()) {
|
1019
|
+
this.activeBlocks = potentialBlocks;
|
1020
|
+
this.setBlockHeight();
|
1021
|
+
}
|
984
1022
|
}
|
985
|
-
|
986
|
-
|
1023
|
+
// fire the event regardless
|
1024
|
+
this.nanoTblBlockRendered.emit({
|
1025
|
+
block: blockIndex,
|
1026
|
+
totalBlocks: this.blockElements.length,
|
1027
|
+
});
|
1028
|
+
}
|
1029
|
+
});
|
987
1030
|
}, {
|
988
1031
|
threshold: [0],
|
989
1032
|
root: this.scrollParent === document.scrollingElement
|
@@ -1005,7 +1048,8 @@ const Table = class {
|
|
1005
1048
|
this.type = 'table';
|
1006
1049
|
this.caption = undefined;
|
1007
1050
|
this.showCaption = false;
|
1008
|
-
this.
|
1051
|
+
this.loading = undefined;
|
1052
|
+
this.internalLoading = false;
|
1009
1053
|
this.placeholderSize = 5;
|
1010
1054
|
this.rows = undefined;
|
1011
1055
|
this.columns = [];
|
@@ -1019,26 +1063,25 @@ const Table = class {
|
|
1019
1063
|
this.customSortFn = undefined;
|
1020
1064
|
this.defaultSort = true;
|
1021
1065
|
this.defaultColDraggable = false;
|
1066
|
+
this.virtualTotalItems = 0;
|
1022
1067
|
this.blocks = [];
|
1023
1068
|
this.activeBlocks = [0, 1, 2];
|
1024
|
-
this.measureHeight = 0;
|
1025
1069
|
this.debounceSetLoading = debounce(this.debounceSetLoading.bind(this), 50);
|
1026
1070
|
}
|
1027
|
-
|
1028
|
-
|
1029
|
-
* or when performing custom filtering or sorting */
|
1030
|
-
get loading() {
|
1031
|
-
return this._loading;
|
1071
|
+
get _loading() {
|
1072
|
+
return this.loading !== undefined ? this.loading : this.internalLoading;
|
1032
1073
|
}
|
1033
|
-
set
|
1074
|
+
set _loading(l) {
|
1075
|
+
if (this.loading !== undefined)
|
1076
|
+
return;
|
1034
1077
|
this.debounceSetLoading(l);
|
1035
1078
|
}
|
1036
1079
|
handleRowsChange() {
|
1037
1080
|
if (!this.rows) {
|
1038
|
-
this.
|
1081
|
+
this._loading = true;
|
1039
1082
|
return;
|
1040
1083
|
}
|
1041
|
-
this.
|
1084
|
+
this._loading = true;
|
1042
1085
|
Promise.resolve(this.rows).then(async (rows) => {
|
1043
1086
|
await storeSetData(this.host, rows);
|
1044
1087
|
// reset everything
|
@@ -1047,7 +1090,7 @@ const Table = class {
|
|
1047
1090
|
await this.columnInit();
|
1048
1091
|
if (!this.isReady)
|
1049
1092
|
this.setInitialBlockDimension();
|
1050
|
-
this.
|
1093
|
+
this._loading = false;
|
1051
1094
|
});
|
1052
1095
|
}
|
1053
1096
|
async handleColsChange() {
|
@@ -1062,6 +1105,9 @@ const Table = class {
|
|
1062
1105
|
handleSearchTermChange() {
|
1063
1106
|
this.searchStart();
|
1064
1107
|
}
|
1108
|
+
virtualTotalItemsChangeHandler() {
|
1109
|
+
this.setBlocks();
|
1110
|
+
}
|
1065
1111
|
/** Remove any column sorts currently applied
|
1066
1112
|
* @returns a promise which resolves when complete */
|
1067
1113
|
async resetSorting() {
|
@@ -1102,11 +1148,25 @@ const Table = class {
|
|
1102
1148
|
this.filters = this.filters.filter((f) => !columnNames.includes(f.prop));
|
1103
1149
|
return this.filterStart();
|
1104
1150
|
}
|
1151
|
+
/** Updates a row model at a given index
|
1152
|
+
* @param row - the row to update.
|
1153
|
+
* *Note* - this should come from the `col.cellTemplate` or `row.rowRender.template` `rowModel` property
|
1154
|
+
* - rows are augmented with certain properties to aid with efficient rendering
|
1155
|
+
* @param rowIndex - the row index to insert this row
|
1156
|
+
*/
|
1157
|
+
async updateRow(row, rowIndex) {
|
1158
|
+
this.rows.splice(rowIndex, 1, row);
|
1159
|
+
this.handleRowsChange();
|
1160
|
+
}
|
1105
1161
|
// uses the first 'tr' of an active block as our yard stick
|
1106
1162
|
set measureEle(el) {
|
1107
1163
|
if (!el)
|
1108
1164
|
return;
|
1109
|
-
|
1165
|
+
const potentialHeight = el.getBoundingClientRect().height;
|
1166
|
+
this.measureHeight =
|
1167
|
+
Math.abs(this.measureHeight - potentialHeight) < 5
|
1168
|
+
? this.measureHeight
|
1169
|
+
: potentialHeight;
|
1110
1170
|
this.unitHeight =
|
1111
1171
|
el.querySelector('tr')?.getBoundingClientRect().height || this.unitHeight;
|
1112
1172
|
}
|
@@ -1152,7 +1212,7 @@ const Table = class {
|
|
1152
1212
|
this.nanoTblAfterSort.emit({ column: column, order });
|
1153
1213
|
}
|
1154
1214
|
async searchStart() {
|
1155
|
-
this.
|
1215
|
+
this._loading = true;
|
1156
1216
|
const sortEvent = this.nanoTblBeforeSearch.emit({ term: this.searchTerm });
|
1157
1217
|
if (sortEvent.defaultPrevented)
|
1158
1218
|
return;
|
@@ -1166,7 +1226,7 @@ const Table = class {
|
|
1166
1226
|
console.warn('search failed', e);
|
1167
1227
|
}
|
1168
1228
|
finally {
|
1169
|
-
this.
|
1229
|
+
this._loading = false;
|
1170
1230
|
}
|
1171
1231
|
}
|
1172
1232
|
async filterStart(filters, additive = true) {
|
@@ -1183,7 +1243,7 @@ const Table = class {
|
|
1183
1243
|
}
|
1184
1244
|
if (this.currentFilters === JSON.stringify(this.filters))
|
1185
1245
|
return;
|
1186
|
-
this.
|
1246
|
+
this._loading = true;
|
1187
1247
|
const sortEvent = this.nanoTblBeforeFilter.emit({ filters: this.filters });
|
1188
1248
|
if (sortEvent.defaultPrevented)
|
1189
1249
|
return;
|
@@ -1192,12 +1252,21 @@ const Table = class {
|
|
1192
1252
|
this.scrollToTop();
|
1193
1253
|
if (this.customFilterFn) {
|
1194
1254
|
try {
|
1195
|
-
await this.customFilterFn(this.filters);
|
1196
|
-
|
1255
|
+
const res = await this.customFilterFn(this.filters);
|
1256
|
+
// if the response is 'true', the custom filter did it's thing
|
1257
|
+
// handover to finish and stop loading state.
|
1258
|
+
// if response is falsey, carry on to do a FE filter
|
1259
|
+
if (res === true) {
|
1260
|
+
this.filterComplete();
|
1261
|
+
this._loading = false;
|
1262
|
+
}
|
1197
1263
|
}
|
1198
1264
|
catch (e) {
|
1265
|
+
// if response errored, stop loading state
|
1266
|
+
// clear current sort cache
|
1199
1267
|
console.warn('custom filter failed', e);
|
1200
1268
|
this.currentFilters = '';
|
1269
|
+
this._loading = false;
|
1201
1270
|
}
|
1202
1271
|
return;
|
1203
1272
|
}
|
@@ -1209,7 +1278,7 @@ const Table = class {
|
|
1209
1278
|
console.warn('filter failed', e);
|
1210
1279
|
}
|
1211
1280
|
finally {
|
1212
|
-
this.
|
1281
|
+
this._loading = false;
|
1213
1282
|
}
|
1214
1283
|
}
|
1215
1284
|
filterComplete() {
|
@@ -1297,23 +1366,33 @@ const Table = class {
|
|
1297
1366
|
* These can then be hidden / shown to improve performance.
|
1298
1367
|
*/
|
1299
1368
|
setBlocks() {
|
1300
|
-
|
1369
|
+
const dRows = this.store.data.state.rows;
|
1370
|
+
if (!dRows.length) {
|
1371
|
+
this.blocks = [];
|
1372
|
+
return;
|
1373
|
+
}
|
1301
1374
|
this.ignoreIO = true;
|
1302
1375
|
let i = 1;
|
1303
|
-
const l = this.
|
1376
|
+
const l = this.virtualTotalItems > dRows.length
|
1377
|
+
? this.virtualTotalItems
|
1378
|
+
: dRows.length;
|
1304
1379
|
let rows = [];
|
1305
1380
|
const blocks = [];
|
1306
1381
|
this.blockHeights = [];
|
1307
1382
|
// old skool loop for perf
|
1308
1383
|
for (i; i <= l; i++) {
|
1309
|
-
rows.push(this.store.data.state.rows[i - 1]);
|
1384
|
+
rows.push(this.store.data.state.rows[i - 1] || { __uuid: '' });
|
1310
1385
|
if (i % this.perBlock === 0) {
|
1386
|
+
// assign a UUID for the whole block
|
1387
|
+
// for block diffing
|
1311
1388
|
blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });
|
1312
1389
|
rows = [];
|
1313
1390
|
}
|
1314
1391
|
}
|
1315
|
-
|
1392
|
+
// any leftover rows
|
1393
|
+
if (rows.length) {
|
1316
1394
|
blocks.push({ rows, __uuid: cyrb53(rows.map((b) => b.__uuid).join()) });
|
1395
|
+
}
|
1317
1396
|
this.blocks = blocks;
|
1318
1397
|
}
|
1319
1398
|
/**
|
@@ -1340,11 +1419,11 @@ const Table = class {
|
|
1340
1419
|
}
|
1341
1420
|
/** cache the height for all active blocks for later renders */
|
1342
1421
|
setBlockHeight() {
|
1343
|
-
|
1344
|
-
this.
|
1345
|
-
|
1346
|
-
|
1347
|
-
|
1422
|
+
this.activeBlocks.forEach((blockIndex) => {
|
1423
|
+
const el = this.blockElements[blockIndex];
|
1424
|
+
if (!el)
|
1425
|
+
return;
|
1426
|
+
readTask(() => {
|
1348
1427
|
const height = el.getBoundingClientRect().height;
|
1349
1428
|
// cache height to our block heights array
|
1350
1429
|
// for subsequent renders
|
@@ -1405,15 +1484,15 @@ const Table = class {
|
|
1405
1484
|
sortable: this.defaultSort,
|
1406
1485
|
draggable: this.defaultColDraggable,
|
1407
1486
|
} }),
|
1408
|
-
]))), this._loading && !this.blocks.length && (h("tbody", { class: `${CSSNAMESPACE}__active` }, [...Array(10).keys()].map((rowIndex) => (h("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: h("nano-skeleton", null) })))))))), !this._loading && !this.blocks.length && (h("tr", null, h("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, h("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, h("slot", { name: "no-results" }, "No results found"))))), this.blocks.map((block, blockIndex) => (h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
|
1487
|
+
]))), this._loading && !this.blocks.length && (h("tbody", { class: `${CSSNAMESPACE}__active` }, [...Array(10).keys()].map((rowIndex) => (h("tr", null, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex, nestedContent: () => h("nano-skeleton", null) })))))))), !this._loading && !this.blocks.length && (h("tr", null, h("th", { class: `${CSSNAMESPACE}__th`, colSpan: this.store.config.state.columns.length }, h("div", { class: "nano-tbl__cell-content nano-tbl__cell-content--no-result" }, h("slot", { name: "no-results" }, "No results found"))))), this.blocks.map((block, blockIndex) => (h("tbody", { key: block.__uuid, id: `tbody-${this.renderId}-${blockIndex}`, ref: (tb) => {
|
1409
1488
|
this.blockElements.push(tb);
|
1410
|
-
this.setupBlockIO(tb, blockIndex);
|
1489
|
+
requestAnimationFrame(() => this.setupBlockIO(tb, blockIndex));
|
1411
1490
|
}, class: {
|
1412
1491
|
[`${CSSNAMESPACE}__inactive`]: !this.activeBlocks.includes(blockIndex),
|
1413
1492
|
[`${CSSNAMESPACE}__active`]: this.activeBlocks.includes(blockIndex),
|
1414
1493
|
} }, this.activeBlocks.includes(blockIndex) ? (block.rows.map((row, i) => {
|
1415
1494
|
const rowIndex = blockIndex > 0 ? blockIndex * this.perBlock + i : i;
|
1416
|
-
return (h(TableRow, { rowRenderer: this.rowRender,
|
1495
|
+
return (h(TableRow, { rowRenderer: this.rowRender, rowModel: row, rowIndex: rowIndex }, this.store.config.state.columns.map((_colModel, colIndex) => (h(TableCell, { rowIndex: rowIndex, colIndex: colIndex })))));
|
1417
1496
|
})) : (h("td", { colSpan: this.store.config.state.columns.length, style: {
|
1418
1497
|
height: this.getBlockHeight(blockIndex),
|
1419
1498
|
} }))))), this.showFooter && (h("tfoot", null, h(TableHeadFootRow, { rowRenderer: this.footRender, onColumnPinned: this.handleColumnPinned }, this.store.config.state.columns.map((colModel) => [
|
@@ -1430,11 +1509,12 @@ const Table = class {
|
|
1430
1509
|
static get watchers() { return {
|
1431
1510
|
"rows": ["handleRowsChange"],
|
1432
1511
|
"columns": ["handleColsChange"],
|
1433
|
-
"searchTerm": ["handleSearchTermChange"]
|
1512
|
+
"searchTerm": ["handleSearchTermChange"],
|
1513
|
+
"virtualTotalItems": ["virtualTotalItemsChangeHandler"]
|
1434
1514
|
}; }
|
1435
1515
|
};
|
1436
1516
|
Table.style = tableCss;
|
1437
1517
|
|
1438
1518
|
export { Table as T, createWorker as c };
|
1439
1519
|
|
1440
|
-
//# sourceMappingURL=nano-table-
|
1520
|
+
//# sourceMappingURL=nano-table-74d627a5.js.map
|