@nanoporetech-digital/components 3.4.0 → 3.5.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 +12 -0
- package/dist/cjs/index-41582c2a.js +16 -12
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/nano-components.cjs.js +1 -1
- package/dist/cjs/nano-demo.cjs.entry.js +291 -0
- package/dist/cjs/nano-demo.cjs.entry.js.map +1 -0
- package/dist/cjs/{nano-table-b9cdafab.js → nano-table-83e46f68.js} +486 -202
- package/dist/cjs/nano-table-83e46f68.js.map +1 -0
- package/dist/cjs/nano-table.cjs.entry.js +1 -1
- package/dist/cjs/{table.worker-291904c9.js → table.worker-525ec230.js} +3 -3
- package/dist/cjs/table.worker-525ec230.js.map +1 -0
- package/dist/cjs/table.worker-e9fb087e.js +4 -0
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/alert/alert.helpers.js.map +1 -1
- package/dist/collection/components/demo/demo.js +284 -0
- package/dist/collection/components/demo/demo.js.map +1 -0
- package/dist/collection/components/dialog/dialog.helpers.js.map +1 -1
- package/dist/collection/components/table/table-interface.js.map +1 -1
- package/dist/collection/components/table/table.cell.js +65 -0
- package/dist/collection/components/table/table.cell.js.map +1 -0
- package/dist/collection/components/table/table.css +98 -20
- package/dist/collection/components/table/table.header.js +156 -0
- package/dist/collection/components/table/table.header.js.map +1 -0
- package/dist/collection/components/table/table.js +170 -18
- package/dist/collection/components/table/table.js.map +1 -1
- package/dist/collection/components/table/table.row.js +113 -0
- package/dist/collection/components/table/table.row.js.map +1 -0
- package/dist/collection/components/table/table.store.js +46 -9
- package/dist/collection/components/table/table.store.js.map +1 -1
- package/dist/collection/components/table/table.utils.js +230 -0
- package/dist/collection/components/table/table.utils.js.map +1 -1
- package/dist/collection/components/table/table.worker.js +1 -0
- package/dist/collection/components/table/table.worker.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/nano-demo.d.ts +11 -0
- package/dist/components/nano-demo.js +341 -0
- package/dist/components/nano-demo.js.map +1 -0
- package/dist/components/nano-table.js +2 -1247
- package/dist/components/nano-table.js.map +1 -1
- package/dist/components/table.js +1539 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/table.worker.js +2 -2
- package/dist/custom-elements/index.d.ts +6 -0
- package/dist/custom-elements/index.js +772 -204
- package/dist/custom-elements/index.js.map +1 -1
- package/dist/esm/index-3c280603.js +16 -12
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/nano-components.js +1 -1
- package/dist/esm/nano-demo.entry.js +287 -0
- package/dist/esm/nano-demo.entry.js.map +1 -0
- package/dist/esm/{nano-table-c8ef2276.js → nano-table-e2405350.js} +487 -203
- package/dist/esm/nano-table-e2405350.js.map +1 -0
- package/dist/esm/nano-table.entry.js +1 -1
- package/dist/esm/{table.worker-65438fa0.js → table.worker-739c193f.js} +3 -3
- package/dist/esm/table.worker-739c193f.js.map +1 -0
- package/dist/esm/table.worker-e9fb087e.js +4 -0
- package/dist/nano-components/index.esm.js.map +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-28fdfa6b.js +5 -0
- package/dist/nano-components/p-28fdfa6b.js.map +1 -0
- package/dist/nano-components/p-85cfb0af.entry.js +5 -0
- package/dist/nano-components/p-85cfb0af.entry.js.map +1 -0
- package/dist/nano-components/p-a71989f3.js +5 -0
- package/dist/nano-components/{p-14218d23.entry.js.map → p-a71989f3.js.map} +0 -0
- package/dist/nano-components/{p-14218d23.entry.js → p-e4a28360.entry.js} +2 -2
- package/dist/nano-components/{p-fe1f8360.js.map → p-e4a28360.entry.js.map} +0 -0
- package/dist/nano-components/p-e9fb087e.js +4 -0
- package/dist/types/components/alert/alert.helpers.d.ts +1 -1
- package/dist/types/components/demo/demo.d.ts +6 -0
- package/dist/types/components/dialog/dialog.helpers.d.ts +1 -1
- package/dist/types/components/table/table-interface.d.ts +38 -23
- package/dist/types/components/table/table.cell.d.ts +18 -0
- package/dist/types/components/table/table.d.ts +36 -1
- package/dist/types/components/table/table.header.d.ts +16 -0
- package/dist/types/components/table/table.row.d.ts +15 -0
- package/dist/types/components/table/table.utils.d.ts +99 -0
- package/dist/types/components.d.ts +50 -0
- package/docs-json.json +124 -3
- package/docs-vscode.json +17 -1
- package/package.json +2 -2
- package/dist/cjs/nano-table-b9cdafab.js.map +0 -1
- package/dist/cjs/table.worker-1fd13775.js +0 -4
- package/dist/cjs/table.worker-291904c9.js.map +0 -1
- package/dist/collection/components/table/table.children.js +0 -224
- package/dist/collection/components/table/table.children.js.map +0 -1
- package/dist/collection/components/table/table.service.js +0 -121
- package/dist/collection/components/table/table.service.js.map +0 -1
- package/dist/esm/nano-table-c8ef2276.js.map +0 -1
- package/dist/esm/table.worker-1fd13775.js +0 -4
- package/dist/esm/table.worker-65438fa0.js.map +0 -1
- package/dist/nano-components/p-1fd13775.js +0 -4
- package/dist/nano-components/p-f9349146.js +0 -5
- package/dist/nano-components/p-f9349146.js.map +0 -1
- package/dist/nano-components/p-fe1f8360.js +0 -5
- package/dist/types/components/table/table.children.d.ts +0 -30
- package/dist/types/components/table/table.service.d.ts +0 -42
@@ -1,224 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Web Components for Nanopore digital Web Apps
|
3
|
-
*/
|
4
|
-
import { Fragment, h } from '@stencil/core';
|
5
|
-
import { CSSNAMESPACE } from './table.constants';
|
6
|
-
import { cellRender, colheadFootRender, fetchStores, mergeCellProperties, mergeProperties, rowDataModel, } from './table.service';
|
7
|
-
function baseClasses(type, vPinned, toString = false) {
|
8
|
-
const classes = {
|
9
|
-
[`${CSSNAMESPACE}__${type}`]: true,
|
10
|
-
[`${CSSNAMESPACE}__pin`]: !!vPinned,
|
11
|
-
[`${CSSNAMESPACE}__pin--top`]: vPinned === 'top',
|
12
|
-
[`${CSSNAMESPACE}__pin--bottom`]: vPinned === 'bottom',
|
13
|
-
};
|
14
|
-
if (toString) {
|
15
|
-
let classString = '';
|
16
|
-
Object.entries(classes).forEach(([className, on]) => {
|
17
|
-
if (on)
|
18
|
-
classString += className + ' ';
|
19
|
-
});
|
20
|
-
return classString;
|
21
|
-
}
|
22
|
-
return classes;
|
23
|
-
}
|
24
|
-
const stickyHIOs = new WeakMap();
|
25
|
-
const stickyVIOs = new WeakMap();
|
26
|
-
function addHObserver(el, pos, cb) {
|
27
|
-
if (stickyHIOs.get(el))
|
28
|
-
return;
|
29
|
-
const store = fetchStores();
|
30
|
-
const root = store.general.state.scrollParent;
|
31
|
-
const observer = new IntersectionObserver(([e]) => {
|
32
|
-
const rootBounds = e.rootBounds || document.scrollingElement.getBoundingClientRect();
|
33
|
-
const positions = {};
|
34
|
-
if (pos === 'start') {
|
35
|
-
positions.start =
|
36
|
-
e.boundingClientRect.x - (rootBounds.x + root.scrollLeft) < 0 &&
|
37
|
-
!e.isIntersecting;
|
38
|
-
}
|
39
|
-
if (pos === 'end') {
|
40
|
-
// console.log('refe', store.general.state.host)
|
41
|
-
// TODO - sort these out for RtL
|
42
|
-
positions.end =
|
43
|
-
e.boundingClientRect.right > e.boundingClientRect.width &&
|
44
|
-
!e.isIntersecting;
|
45
|
-
}
|
46
|
-
cb(positions);
|
47
|
-
}, {
|
48
|
-
threshold: [1],
|
49
|
-
rootMargin: '1px 0px 100px 0px',
|
50
|
-
root: root === document.scrollingElement ? null : root,
|
51
|
-
});
|
52
|
-
stickyHIOs.set(el, observer);
|
53
|
-
// dirty fix - wait a tick 'cos nano-size-observer isn't always ready in-time
|
54
|
-
setTimeout(() => observer.observe(el), 300);
|
55
|
-
}
|
56
|
-
function addVObserver(el, pos, cb) {
|
57
|
-
if (stickyVIOs.get(el))
|
58
|
-
return;
|
59
|
-
const store = fetchStores();
|
60
|
-
const root = store.general.state.scrollParent;
|
61
|
-
const observer = new IntersectionObserver(([e]) => {
|
62
|
-
const rootBounds = e.rootBounds || document.scrollingElement.getBoundingClientRect();
|
63
|
-
const positions = {};
|
64
|
-
if (pos === 'top') {
|
65
|
-
positions.top =
|
66
|
-
e.boundingClientRect.y - (rootBounds.y + root.scrollTop) < 0 &&
|
67
|
-
!e.isIntersecting;
|
68
|
-
}
|
69
|
-
if (pos === 'bottom')
|
70
|
-
positions.bottom =
|
71
|
-
e.boundingClientRect.height > e.intersectionRect.height &&
|
72
|
-
!e.isIntersecting;
|
73
|
-
cb(positions);
|
74
|
-
}, {
|
75
|
-
threshold: [1],
|
76
|
-
rootMargin: '0px 100px 0px 100px',
|
77
|
-
root: root === document.scrollingElement ? null : root,
|
78
|
-
});
|
79
|
-
stickyVIOs.set(el, observer);
|
80
|
-
requestAnimationFrame(() => observer.observe(el));
|
81
|
-
}
|
82
|
-
export const TableRow = ({ rowRenderer, rowIndex, row }, children) => {
|
83
|
-
let extraProps = {};
|
84
|
-
if (!row) {
|
85
|
-
const model = rowDataModel(rowIndex);
|
86
|
-
row = model.row;
|
87
|
-
}
|
88
|
-
if (rowRenderer?.rowProperties) {
|
89
|
-
extraProps =
|
90
|
-
rowRenderer.rowProperties({ row: row, rowIndex }) || extraProps;
|
91
|
-
}
|
92
|
-
let pinned;
|
93
|
-
if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {
|
94
|
-
pinned = rowRenderer.pinned();
|
95
|
-
}
|
96
|
-
const baseProps = { class: baseClasses('tr', pinned) };
|
97
|
-
const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
|
98
|
-
return (h("tr", { ...props, key: row.__uuid }, children));
|
99
|
-
};
|
100
|
-
export const TableHeadFootRow = ({ rowRenderer, onColumnPinned }, children, utils) => {
|
101
|
-
let extraProps = {};
|
102
|
-
if (rowRenderer.rowProperties) {
|
103
|
-
extraProps = rowRenderer.rowProperties() || {};
|
104
|
-
}
|
105
|
-
const pinned = rowRenderer.pinned || null;
|
106
|
-
const baseProps = { class: baseClasses('tr', null) };
|
107
|
-
const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
|
108
|
-
const tpl = rowRenderer?.template;
|
109
|
-
if (tpl) {
|
110
|
-
let toRender = tpl(h, {
|
111
|
-
renderedRow: h("tr", { ...props }, children),
|
112
|
-
});
|
113
|
-
if (Array.isArray(toRender)) {
|
114
|
-
toRender = utils.map(toRender, (node) => {
|
115
|
-
if (node.vtag === 'tr') {
|
116
|
-
node.vattrs = mergeProperties({ class: baseClasses('tr', null, true) }, node.vattrs);
|
117
|
-
if (!!node.vchildren) {
|
118
|
-
node.vchildren = utils.map(node.vchildren, (cNode) => {
|
119
|
-
if (['td', 'th'].includes(cNode.vtag.toString())) {
|
120
|
-
cNode.vattrs = mergeProperties({
|
121
|
-
class: baseClasses(cNode.vtag.toString(), pinned, true),
|
122
|
-
ref: (th) => {
|
123
|
-
addVObserver(th, pinned, onColumnPinned);
|
124
|
-
},
|
125
|
-
}, cNode.vattrs);
|
126
|
-
}
|
127
|
-
return cNode;
|
128
|
-
});
|
129
|
-
}
|
130
|
-
}
|
131
|
-
return node;
|
132
|
-
});
|
133
|
-
}
|
134
|
-
return toRender;
|
135
|
-
}
|
136
|
-
return h("tr", { ...props }, children);
|
137
|
-
};
|
138
|
-
export const TableColHead = ({ column, headRenderer, onColumnOrderClick, onColumnPinned, }) => {
|
139
|
-
function handleColumnOrderClick(e) {
|
140
|
-
let order;
|
141
|
-
switch (column.order) {
|
142
|
-
case 'asc':
|
143
|
-
order = 'desc';
|
144
|
-
break;
|
145
|
-
case 'desc':
|
146
|
-
order = null;
|
147
|
-
break;
|
148
|
-
default:
|
149
|
-
order = 'asc';
|
150
|
-
}
|
151
|
-
onColumnOrderClick(order, column.prop, e.target.closest('th'));
|
152
|
-
}
|
153
|
-
let extraProps = {};
|
154
|
-
if (column.columnProperties) {
|
155
|
-
extraProps = column.columnProperties(column) || extraProps;
|
156
|
-
}
|
157
|
-
const baseProps = {
|
158
|
-
class: {
|
159
|
-
...baseClasses('th', headRenderer?.pinned),
|
160
|
-
[`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',
|
161
|
-
[`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',
|
162
|
-
[`${CSSNAMESPACE}__ordered`]: !!column.order,
|
163
|
-
[`${CSSNAMESPACE}__filtered`]: !!column.filter,
|
164
|
-
},
|
165
|
-
};
|
166
|
-
let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;
|
167
|
-
const content = colheadFootRender(column);
|
168
|
-
if (!content)
|
169
|
-
return h(Fragment, null);
|
170
|
-
props =
|
171
|
-
Number(props.colspan) > 1
|
172
|
-
? { ...props, scope: 'colgroup' }
|
173
|
-
: { ...props, scope: 'col' };
|
174
|
-
if (column.sortable !== false) {
|
175
|
-
return (h("th", { ...props, "aria-sort": column.order
|
176
|
-
? column.order === 'asc'
|
177
|
-
? 'ascending'
|
178
|
-
: 'descending'
|
179
|
-
: 'none', ref: (th) => {
|
180
|
-
if (['end', 'start'].includes(column.pinned))
|
181
|
-
addHObserver(th, column.pinned, onColumnPinned);
|
182
|
-
if (['top', 'bottom'].includes(headRenderer.pinned))
|
183
|
-
addVObserver(th, headRenderer.pinned, onColumnPinned);
|
184
|
-
} }, h("button", { class: {
|
185
|
-
[`${CSSNAMESPACE}__order-btn`]: true,
|
186
|
-
[`${CSSNAMESPACE}__cell-content`]: true,
|
187
|
-
}, onClick: handleColumnOrderClick }, colheadFootRender(column), !!column.filter && h("nano-icon", { name: "light/filter" }), !!column.order &&
|
188
|
-
(column.order === 'desc' ? (h("nano-icon", { name: "solid/long-arrow-down" })) : (h("nano-icon", { name: "solid/long-arrow-up" }))), h("div", { class: `${CSSNAMESPACE}__status-icons` }, h("nano-icon", { name: "light/chevron-down" })))));
|
189
|
-
}
|
190
|
-
return (h("th", { ...props, ref: (th) => {
|
191
|
-
if (['end', 'start'].includes(column.pinned))
|
192
|
-
addHObserver(th, column.pinned, onColumnPinned);
|
193
|
-
if (['top', 'bottom'].includes(headRenderer.pinned))
|
194
|
-
addVObserver(th, headRenderer.pinned, onColumnPinned);
|
195
|
-
} }, h("div", { class: `${CSSNAMESPACE}__cell-content` }, colheadFootRender(column), !!column.filter && h("nano-icon", { name: "light/bars-filter" }))));
|
196
|
-
};
|
197
|
-
export const TableCell = ({ rowIndex, colIndex, nestedContent, }) => {
|
198
|
-
const content = nestedContent || cellRender(rowIndex, colIndex);
|
199
|
-
if (!content)
|
200
|
-
return h(Fragment, null);
|
201
|
-
const store = fetchStores();
|
202
|
-
const column = store.config.state.columns[colIndex];
|
203
|
-
let CellType = 'td';
|
204
|
-
let props = mergeCellProperties(rowIndex, colIndex, {
|
205
|
-
class: {
|
206
|
-
[`${CSSNAMESPACE}__td`]: true,
|
207
|
-
[`${CSSNAMESPACE}__ordered`]: !!column.order,
|
208
|
-
[`${CSSNAMESPACE}__pin`]: !!column.pinned,
|
209
|
-
[`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',
|
210
|
-
[`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',
|
211
|
-
},
|
212
|
-
});
|
213
|
-
if (column.rowHeader) {
|
214
|
-
props =
|
215
|
-
Number(props.rowspan) > 1
|
216
|
-
? { ...props, scope: 'rowgroup' }
|
217
|
-
: { ...props, scope: 'row' };
|
218
|
-
CellType = 'th';
|
219
|
-
}
|
220
|
-
return (h(CellType
|
221
|
-
// role="gridcell"
|
222
|
-
, { ...props }, h("div", { class: `${CSSNAMESPACE}__cell-content` }, content)));
|
223
|
-
};
|
224
|
-
//# sourceMappingURL=table.children.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"table.children.js","sourceRoot":"","sources":["../../../src/components/table/table.children.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Fragment, FunctionalComponent, h, VNode } from '@stencil/core';\nimport { CSSNAMESPACE } from './table.constants';\nimport {\n cellRender,\n colheadFootRender,\n fetchStores,\n mergeCellProperties,\n mergeProperties,\n rowDataModel,\n} from './table.service';\nimport type { TableTypes } from '../../interface';\n\ntype ValidRenderTypes = 'tr' | 'th' | 'td';\n\ntype PinnedCb = (positions: { [key in TableTypes.Position]?: boolean }) => void;\n\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: false\n): { [key: string]: boolean };\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString?: true\n): string;\nfunction baseClasses(\n type: ValidRenderTypes,\n vPinned?: TableTypes.Position,\n toString = false\n): { [key: string]: boolean } | string {\n const classes = {\n [`${CSSNAMESPACE}__${type}`]: true,\n [`${CSSNAMESPACE}__pin`]: !!vPinned,\n [`${CSSNAMESPACE}__pin--top`]: vPinned === 'top',\n [`${CSSNAMESPACE}__pin--bottom`]: vPinned === 'bottom',\n };\n\n if (toString) {\n let classString = '';\n Object.entries(classes).forEach(([className, on]) => {\n if (on) classString += className + ' ';\n });\n return classString;\n }\n return classes;\n}\n\nconst stickyHIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\nconst stickyVIOs: WeakMap<HTMLTableCellElement, IntersectionObserver> =\n new WeakMap();\n\nfunction addHObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyHIOs.get(el)) return;\n\n const store = fetchStores();\n const root = store.general.state.scrollParent;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const rootBounds =\n e.rootBounds || document.scrollingElement.getBoundingClientRect();\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'start') {\n positions.start =\n e.boundingClientRect.x - (rootBounds.x + root.scrollLeft) < 0 &&\n !e.isIntersecting;\n }\n if (pos === 'end') {\n // console.log('refe', store.general.state.host)\n // TODO - sort these out for RtL\n positions.end =\n e.boundingClientRect.right > e.boundingClientRect.width &&\n !e.isIntersecting;\n }\n cb(positions);\n },\n {\n threshold: [1],\n rootMargin: '1px 0px 100px 0px',\n root: root === document.scrollingElement ? null : root,\n }\n );\n stickyHIOs.set(el, observer);\n // dirty fix - wait a tick 'cos nano-size-observer isn't always ready in-time\n setTimeout(() => observer.observe(el), 300);\n}\n\nfunction addVObserver(\n el: HTMLTableCellElement,\n pos: TableTypes.Position,\n cb: PinnedCb\n) {\n if (stickyVIOs.get(el)) return;\n\n const store = fetchStores();\n const root = store.general.state.scrollParent;\n\n const observer = new IntersectionObserver(\n ([e]) => {\n const rootBounds =\n e.rootBounds || document.scrollingElement.getBoundingClientRect();\n const positions: { [key in TableTypes.Position]?: boolean } = {};\n if (pos === 'top') {\n positions.top =\n e.boundingClientRect.y - (rootBounds.y + root.scrollTop) < 0 &&\n !e.isIntersecting;\n }\n if (pos === 'bottom')\n positions.bottom =\n e.boundingClientRect.height > e.intersectionRect.height &&\n !e.isIntersecting;\n cb(positions);\n },\n {\n threshold: [1],\n rootMargin: '0px 100px 0px 100px',\n root: root === document.scrollingElement ? null : root,\n }\n );\n stickyVIOs.set(el, observer);\n requestAnimationFrame(() => observer.observe(el));\n}\n\ntype TableRowProps = {\n rowRenderer: TableTypes.RowRenderer;\n rowIndex?: number;\n row?: TableTypes.RowData;\n};\n\nexport const TableRow: FunctionalComponent<TableRowProps> = (\n { rowRenderer, rowIndex, row },\n children\n) => {\n let extraProps = {};\n\n if (!row) {\n const model = rowDataModel(rowIndex);\n row = model.row;\n }\n\n if (rowRenderer?.rowProperties) {\n extraProps =\n rowRenderer.rowProperties({ row: row, rowIndex }) || extraProps;\n }\n\n let pinned: TableTypes.Position;\n if (rowRenderer?.pinned && typeof rowRenderer.pinned === 'function') {\n pinned = rowRenderer.pinned();\n }\n\n const baseProps = { class: baseClasses('tr', pinned) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n\n return (\n <tr {...props} key={row.__uuid}>\n {children}\n </tr>\n );\n};\n\ntype TableHeadFootProps = {\n rowRenderer: TableTypes.HeadFootRenderer;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableHeadFootRow: FunctionalComponent<TableHeadFootProps> = (\n { rowRenderer, onColumnPinned },\n children,\n utils\n) => {\n let extraProps = {};\n if (rowRenderer.rowProperties) {\n extraProps = rowRenderer.rowProperties() || {};\n }\n\n const pinned = rowRenderer.pinned || null;\n const baseProps = { class: baseClasses('tr', null) };\n const props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const tpl = rowRenderer?.template;\n\n if (tpl) {\n let toRender = tpl(h as TableTypes.HFunc<VNode>, {\n renderedRow: <tr {...props}>{children}</tr>,\n });\n\n if (Array.isArray(toRender)) {\n toRender = utils.map(toRender, (node) => {\n if (node.vtag === 'tr') {\n node.vattrs = mergeProperties(\n { class: baseClasses('tr', null, true) },\n node.vattrs\n );\n\n if (!!node.vchildren) {\n node.vchildren = utils.map(node.vchildren, (cNode) => {\n if (['td', 'th'].includes(cNode.vtag.toString())) {\n cNode.vattrs = mergeProperties(\n {\n class: baseClasses(\n cNode.vtag.toString() as ValidRenderTypes,\n pinned,\n true\n ),\n ref: (th) => {\n addVObserver(th, pinned, onColumnPinned);\n },\n },\n cNode.vattrs\n );\n }\n return cNode;\n });\n }\n }\n return node;\n });\n }\n return toRender;\n }\n\n return <tr {...props}>{children}</tr>;\n};\n\ntype TableColHeadProps = {\n column: TableTypes.ColumnConfig;\n headRenderer: TableTypes.HeadFootRenderer;\n onColumnOrderClick?: (\n order: TableTypes.Order,\n column: TableTypes.Prop,\n el: HTMLElement\n ) => void;\n onColumnPinned?: PinnedCb;\n};\n\nexport const TableColHead: FunctionalComponent<TableColHeadProps> = ({\n column,\n headRenderer,\n onColumnOrderClick,\n onColumnPinned,\n}) => {\n function handleColumnOrderClick(e: MouseEvent & { target: HTMLElement }) {\n let order;\n switch (column.order) {\n case 'asc':\n order = 'desc';\n break;\n case 'desc':\n order = null;\n break;\n default:\n order = 'asc';\n }\n onColumnOrderClick(order, column.prop, e.target.closest('th'));\n }\n\n let extraProps = {};\n if (column.columnProperties) {\n extraProps = column.columnProperties(column) || extraProps;\n }\n\n const baseProps = {\n class: {\n ...baseClasses('th', headRenderer?.pinned),\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__filtered`]: !!column.filter,\n },\n };\n let props = extraProps ? mergeProperties(baseProps, extraProps) : baseProps;\n const content = colheadFootRender(column);\n\n if (!content) return <Fragment></Fragment>;\n\n props =\n Number((props as TableTypes.EleProps).colspan) > 1\n ? { ...props, scope: 'colgroup' }\n : { ...props, scope: 'col' };\n\n if (column.sortable !== false) {\n return (\n <th\n {...props}\n aria-sort={\n column.order\n ? column.order === 'asc'\n ? 'ascending'\n : 'descending'\n : 'none'\n }\n ref={(th) => {\n if (['end', 'start'].includes(column.pinned))\n addHObserver(th, column.pinned, onColumnPinned);\n if (['top', 'bottom'].includes(headRenderer.pinned))\n addVObserver(th, headRenderer.pinned, onColumnPinned);\n }}\n >\n <button\n class={{\n [`${CSSNAMESPACE}__order-btn`]: true,\n [`${CSSNAMESPACE}__cell-content`]: true,\n }}\n onClick={handleColumnOrderClick}\n >\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/filter\" />}\n {!!column.order &&\n (column.order === 'desc' ? (\n <nano-icon name=\"solid/long-arrow-down\" />\n ) : (\n <nano-icon name=\"solid/long-arrow-up\" />\n ))}\n <div class={`${CSSNAMESPACE}__status-icons`}>\n <nano-icon name=\"light/chevron-down\" />\n </div>\n </button>\n </th>\n );\n }\n\n return (\n <th\n {...props}\n ref={(th) => {\n if (['end', 'start'].includes(column.pinned))\n addHObserver(th, column.pinned, onColumnPinned);\n if (['top', 'bottom'].includes(headRenderer.pinned))\n addVObserver(th, headRenderer.pinned, onColumnPinned);\n }}\n >\n <div class={`${CSSNAMESPACE}__cell-content`}>\n {colheadFootRender(column)}\n {!!column.filter && <nano-icon name=\"light/bars-filter\" />}\n </div>\n </th>\n );\n};\n\ntype TableCellProps = {\n rowIndex: number;\n colIndex: number;\n nestedContent?: VNode;\n};\n\nexport const TableCell: FunctionalComponent<TableCellProps> = ({\n rowIndex,\n colIndex,\n nestedContent,\n}) => {\n const content = nestedContent || cellRender(rowIndex, colIndex);\n if (!content) return <Fragment></Fragment>;\n\n const store = fetchStores();\n const column = store.config.state.columns[colIndex];\n let CellType = 'td';\n let props = mergeCellProperties(rowIndex, colIndex, {\n class: {\n [`${CSSNAMESPACE}__td`]: true,\n [`${CSSNAMESPACE}__ordered`]: !!column.order,\n [`${CSSNAMESPACE}__pin`]: !!column.pinned,\n [`${CSSNAMESPACE}__pin--start`]: column.pinned === 'start',\n [`${CSSNAMESPACE}__pin--end`]: column.pinned === 'end',\n },\n });\n\n if (column.rowHeader) {\n props =\n Number((props as TableTypes.EleProps).rowspan) > 1\n ? { ...props, scope: 'rowgroup' }\n : { ...props, scope: 'row' };\n CellType = 'th';\n }\n\n return (\n <CellType\n // role=\"gridcell\"\n {...props}\n >\n <div class={`${CSSNAMESPACE}__cell-content`}>{content}</div>\n </CellType>\n );\n};\n"]}
|
@@ -1,121 +0,0 @@
|
|
1
|
-
/*!
|
2
|
-
* Web Components for Nanopore digital Web Apps
|
3
|
-
*/
|
4
|
-
import { getRenderingRef, getElement, h, Fragment } from '@stencil/core';
|
5
|
-
import { getStore } from './table.store';
|
6
|
-
/**
|
7
|
-
* Get a model object for custom cell / property renderers.
|
8
|
-
* @param rowIndex - the current row index being rendered
|
9
|
-
* @param colIndex - the current column index being rendered
|
10
|
-
* @returns a model object which will be passed to custom renderers
|
11
|
-
*/
|
12
|
-
function colDataModel(rowIndex, colIndex) {
|
13
|
-
const store = fetchStores();
|
14
|
-
const columns = store.config.state.columns;
|
15
|
-
const rows = store.data.state.rows;
|
16
|
-
const column = columns[colIndex];
|
17
|
-
const prop = column?.prop;
|
18
|
-
const rowModel = rows[rowIndex];
|
19
|
-
const cellModel = rowModel[columns[colIndex].prop];
|
20
|
-
return {
|
21
|
-
prop,
|
22
|
-
cellModel,
|
23
|
-
column,
|
24
|
-
rowIndex,
|
25
|
-
rowModel,
|
26
|
-
};
|
27
|
-
}
|
28
|
-
/**
|
29
|
-
* Get a model object for custom row renderers.
|
30
|
-
* @param rowIndex
|
31
|
-
* @returns a model object passed to custom row renderers
|
32
|
-
*/
|
33
|
-
export function rowDataModel(rowIndex) {
|
34
|
-
const store = fetchStores();
|
35
|
-
const rows = store.data.state.rows;
|
36
|
-
const row = rows[rowIndex];
|
37
|
-
return {
|
38
|
-
row,
|
39
|
-
rowIndex,
|
40
|
-
};
|
41
|
-
}
|
42
|
-
/**
|
43
|
-
* Merges 2 objects of properties together
|
44
|
-
* @param current - property object
|
45
|
-
* @param extra - additional object property
|
46
|
-
* @returns - merged properties that can be applied to a node
|
47
|
-
*/
|
48
|
-
export function mergeProperties(current, extra) {
|
49
|
-
if (!extra)
|
50
|
-
return current;
|
51
|
-
// top level merge
|
52
|
-
const props = { ...extra, ...current };
|
53
|
-
// deeper merge
|
54
|
-
// merge classes maps or strings
|
55
|
-
if (extra.class) {
|
56
|
-
if (typeof extra.class === 'object' && typeof props.class === 'object') {
|
57
|
-
props.class = { ...extra.class, ...props.class };
|
58
|
-
}
|
59
|
-
else if (typeof extra.class === 'string' &&
|
60
|
-
typeof props.class === 'object') {
|
61
|
-
props.class[extra.class] = true;
|
62
|
-
}
|
63
|
-
else if (typeof props.class === 'string') {
|
64
|
-
props.class += ' ' + extra.class;
|
65
|
-
}
|
66
|
-
}
|
67
|
-
// merge style
|
68
|
-
if (extra.style) {
|
69
|
-
props.style = { ...extra.style, ...props.style };
|
70
|
-
}
|
71
|
-
return props;
|
72
|
-
}
|
73
|
-
/**
|
74
|
-
* Returns the current nano-table's stores.
|
75
|
-
* @returns the current nano-table stores
|
76
|
-
*/
|
77
|
-
export function fetchStores() {
|
78
|
-
return getStore(getElement(getRenderingRef()));
|
79
|
-
}
|
80
|
-
/**
|
81
|
-
* Merges any defined cell properties with properties
|
82
|
-
* required by `nano-table` functionality
|
83
|
-
* @param rowIndex - the current row index being rendered
|
84
|
-
* @param colIndex = the current column index being rendered
|
85
|
-
* @param defaultProps - default properties required by `nano-table`
|
86
|
-
* @returns - the merged properties that will be applied to a node
|
87
|
-
*/
|
88
|
-
export function mergeCellProperties(rowIndex, colIndex, defaultProps) {
|
89
|
-
const props = { ...defaultProps };
|
90
|
-
const extraPropsFunc = fetchStores().config.state.columns[colIndex]?.cellProperties;
|
91
|
-
if (!extraPropsFunc)
|
92
|
-
return props;
|
93
|
-
const data = colDataModel(rowIndex, colIndex);
|
94
|
-
const extra = extraPropsFunc(data);
|
95
|
-
if (!extra)
|
96
|
-
return props;
|
97
|
-
return mergeProperties(props, extra);
|
98
|
-
}
|
99
|
-
/**
|
100
|
-
* Renders a cell using a custom renderer if set.
|
101
|
-
* @param rowIndex - the current row index being rendered
|
102
|
-
* @param colIndex - the current column index being rendered
|
103
|
-
* @returns - a JSX node
|
104
|
-
*/
|
105
|
-
export function cellRender(rowIndex, colIndex) {
|
106
|
-
const store = fetchStores();
|
107
|
-
const columns = store.config.state.columns;
|
108
|
-
const tpl = columns[colIndex]?.cellTemplate;
|
109
|
-
const model = colDataModel(rowIndex, colIndex);
|
110
|
-
return tpl ? (tpl(h, model)) : (h(Fragment, null, model.cellModel.toString()));
|
111
|
-
}
|
112
|
-
/**
|
113
|
-
* Renders a table header (within a thead) using a custom template if set.
|
114
|
-
* @param col - the current column config object
|
115
|
-
* @returns - a JSX node
|
116
|
-
*/
|
117
|
-
export function colheadFootRender(col) {
|
118
|
-
const tpl = col?.colTemplate;
|
119
|
-
return tpl ? (tpl(h, col)) : (h(Fragment, null, col.title));
|
120
|
-
}
|
121
|
-
//# sourceMappingURL=table.service.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"table.service.js","sourceRoot":"","sources":["../../../src/components/table/table.service.tsx"],"names":[],"mappings":"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","sourcesContent":["import { getRenderingRef, getElement, VNode, h, Fragment } from '@stencil/core';\nimport { getStore } from './table.store';\nimport type { TableTypes } from '../../interface';\n\n/**\n * Get a model object for custom cell / property renderers.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns a model object which will be passed to custom renderers\n */\nfunction colDataModel(\n rowIndex: number,\n colIndex: number\n): TableTypes.ColumnDataSchemaModel {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const rows = store.data.state.rows;\n\n const column = columns[colIndex];\n const prop: TableTypes.ColumnProp | undefined = column?.prop;\n const rowModel = rows[rowIndex];\n const cellModel = rowModel[columns[colIndex].prop];\n\n return {\n prop,\n cellModel,\n column,\n rowIndex,\n rowModel,\n };\n}\n\n/**\n * Get a model object for custom row renderers.\n * @param rowIndex\n * @returns a model object passed to custom row renderers\n */\nexport function rowDataModel(rowIndex: number): TableTypes.RowDataSchemaModel {\n const store = fetchStores();\n const rows = store.data.state.rows;\n const row = rows[rowIndex];\n\n return {\n row,\n rowIndex,\n };\n}\n\n/**\n * Merges 2 objects of properties together\n * @param current - property object\n * @param extra - additional object property\n * @returns - merged properties that can be applied to a node\n */\nexport function mergeProperties(\n current: TableTypes.EleProps,\n extra: TableTypes.EleProps\n) {\n if (!extra) return current;\n\n // top level merge\n const props: TableTypes.EleProps = { ...extra, ...current };\n\n // deeper merge\n // merge classes maps or strings\n if (extra.class) {\n if (typeof extra.class === 'object' && typeof props.class === 'object') {\n props.class = { ...extra.class, ...props.class };\n } else if (\n typeof extra.class === 'string' &&\n typeof props.class === 'object'\n ) {\n props.class[extra.class] = true;\n } else if (typeof props.class === 'string') {\n props.class += ' ' + extra.class;\n }\n }\n // merge style\n if (extra.style) {\n props.style = { ...extra.style, ...props.style };\n }\n return props;\n}\n\n/**\n * Returns the current nano-table's stores.\n * @returns the current nano-table stores\n */\nexport function fetchStores() {\n return getStore(getElement(getRenderingRef()));\n}\n\n/**\n * Merges any defined cell properties with properties\n * required by `nano-table` functionality\n * @param rowIndex - the current row index being rendered\n * @param colIndex = the current column index being rendered\n * @param defaultProps - default properties required by `nano-table`\n * @returns - the merged properties that will be applied to a node\n */\nexport function mergeCellProperties(\n rowIndex: number,\n colIndex: number,\n defaultProps: TableTypes.EleProps\n): TableTypes.EleProps {\n const props: TableTypes.EleProps = { ...defaultProps };\n const extraPropsFunc =\n fetchStores().config.state.columns[colIndex]?.cellProperties;\n if (!extraPropsFunc) return props;\n\n const data = colDataModel(rowIndex, colIndex);\n const extra = extraPropsFunc(data);\n if (!extra) return props;\n\n return mergeProperties(props, extra);\n}\n\n/**\n * Renders a cell using a custom renderer if set.\n * @param rowIndex - the current row index being rendered\n * @param colIndex - the current column index being rendered\n * @returns - a JSX node\n */\nexport function cellRender(rowIndex: number, colIndex: number): VNode {\n const store = fetchStores();\n const columns = store.config.state.columns;\n const tpl = columns[colIndex]?.cellTemplate;\n const model = colDataModel(rowIndex, colIndex);\n\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, model)\n ) : (\n <Fragment>{model.cellModel.toString()}</Fragment>\n );\n}\n\n/**\n * Renders a table header (within a thead) using a custom template if set.\n * @param col - the current column config object\n * @returns - a JSX node\n */\nexport function colheadFootRender(col: TableTypes.ColumnConfig): VNode {\n const tpl = col?.colTemplate;\n return tpl ? (\n tpl(h as unknown as TableTypes.HFunc<VNode>, col)\n ) : (\n <Fragment>{col.title}</Fragment>\n );\n}\n"]}
|