@neovici/cosmoz-omnitable 14.21.3 → 14.22.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/dist/cosmoz-omnitable-column-amount.js +27 -29
- package/dist/cosmoz-omnitable-column-autocomplete.js +24 -28
- package/dist/cosmoz-omnitable-column-boolean.js +17 -25
- package/dist/cosmoz-omnitable-column-date.js +26 -28
- package/dist/cosmoz-omnitable-column-datetime.js +26 -28
- package/dist/cosmoz-omnitable-column-list-data.js +6 -8
- package/dist/cosmoz-omnitable-column-list-horizontal.js +15 -17
- package/dist/cosmoz-omnitable-column-list-mixin.js +15 -28
- package/dist/cosmoz-omnitable-column-list.js +19 -21
- package/dist/cosmoz-omnitable-column-mixin.js +8 -12
- package/dist/cosmoz-omnitable-column-number.js +27 -29
- package/dist/cosmoz-omnitable-column-time.js +24 -26
- package/dist/cosmoz-omnitable-column.js +11 -13
- package/dist/cosmoz-omnitable-columns.js +9 -11
- package/dist/cosmoz-omnitable-group-row.js +4 -6
- package/dist/cosmoz-omnitable-header-row.js +15 -17
- package/dist/cosmoz-omnitable-item-expand-line.js +5 -7
- package/dist/cosmoz-omnitable-item-expand.js +6 -8
- package/dist/cosmoz-omnitable-item-row.js +5 -7
- package/dist/cosmoz-omnitable-skeleton.js +6 -8
- package/dist/cosmoz-omnitable-styles.js +4 -7
- package/dist/cosmoz-omnitable.d.ts +1 -1
- package/dist/cosmoz-omnitable.d.ts.map +1 -1
- package/dist/cosmoz-omnitable.js +31 -37
- package/dist/grouped-list/cosmoz-grouped-list-row.js +2 -4
- package/dist/grouped-list/cosmoz-grouped-list.js +4 -6
- package/dist/grouped-list/index.js +1 -3
- package/dist/grouped-list/use-collapsible-items.d.ts +4 -4
- package/dist/grouped-list/use-collapsible-items.js +8 -12
- package/dist/grouped-list/use-cosmoz-grouped-list.d.ts +1 -1
- package/dist/grouped-list/use-cosmoz-grouped-list.js +19 -23
- package/dist/grouped-list/use-selected-items.d.ts +10 -10
- package/dist/grouped-list/use-selected-items.js +15 -19
- package/dist/grouped-list/use-weak-state.d.ts +3 -3
- package/dist/grouped-list/use-weak-state.js +6 -10
- package/dist/grouped-list/utils.js +1 -11
- package/dist/lib/compute-layout.js +7 -12
- package/dist/lib/cosmoz-omnitable-amount-range-input.js +14 -16
- package/dist/lib/cosmoz-omnitable-date-input-mixin.js +5 -9
- package/dist/lib/cosmoz-omnitable-date-range-input.js +12 -14
- package/dist/lib/cosmoz-omnitable-datetime-range-input.js +13 -15
- package/dist/lib/cosmoz-omnitable-number-range-input.js +12 -14
- package/dist/lib/cosmoz-omnitable-range-input-mixin.js +8 -12
- package/dist/lib/cosmoz-omnitable-resize-nub.js +5 -7
- package/dist/lib/cosmoz-omnitable-time-range-input.js +12 -14
- package/dist/lib/generic-sorter.js +1 -5
- package/dist/lib/icons.d.ts +4 -4
- package/dist/lib/icons.d.ts.map +1 -1
- package/dist/lib/icons.js +5 -8
- package/dist/lib/layout.js +2 -5
- package/dist/lib/polymer-haunted-render-mixin.js +6 -10
- package/dist/lib/render-footer.d.ts +1 -1
- package/dist/lib/render-footer.d.ts.map +1 -1
- package/dist/lib/render-footer.js +12 -16
- package/dist/lib/render-header.d.ts +1 -1
- package/dist/lib/render-header.d.ts.map +1 -1
- package/dist/lib/render-header.js +5 -9
- package/dist/lib/render-list.d.ts +1 -1
- package/dist/lib/render-list.d.ts.map +1 -1
- package/dist/lib/render-list.js +15 -19
- package/dist/lib/save-as-csv-action.js +3 -7
- package/dist/lib/save-as-xlsx-action.js +5 -9
- package/dist/lib/settings/cosmoz-omnitable-settings.js +33 -71
- package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts +3 -3
- package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts.map +1 -1
- package/dist/lib/settings/cosmoz-omnitable-sort-group.js +12 -19
- package/dist/lib/settings/drivers/context.d.ts +10 -2
- package/dist/lib/settings/drivers/context.d.ts.map +1 -1
- package/dist/lib/settings/drivers/context.js +6 -13
- package/dist/lib/settings/drivers/index.js +3 -25
- package/dist/lib/settings/drivers/local.js +1 -3
- package/dist/lib/settings/drivers/remote.js +1 -3
- package/dist/lib/settings/index.js +2 -9
- package/dist/lib/settings/normalize.js +10 -15
- package/dist/lib/settings/style.css.js +5 -8
- package/dist/lib/settings/use-saved-settings.d.ts +2 -2
- package/dist/lib/settings/use-saved-settings.js +9 -11
- package/dist/lib/settings/use-settings-ui.js +12 -14
- package/dist/lib/settings/use-settings.d.ts +12 -6
- package/dist/lib/settings/use-settings.d.ts.map +1 -1
- package/dist/lib/settings/use-settings.js +8 -46
- package/dist/lib/types.js +1 -2
- package/dist/lib/use-canvas-width.js +5 -9
- package/dist/lib/use-dom-columns.d.ts +1 -1
- package/dist/lib/use-dom-columns.d.ts.map +1 -1
- package/dist/lib/use-dom-columns.js +7 -11
- package/dist/lib/use-fast-layout.d.ts +1 -1
- package/dist/lib/use-fast-layout.js +18 -22
- package/dist/lib/use-footer.js +1 -5
- package/dist/lib/use-hash-state.js +11 -15
- package/dist/lib/use-header.js +5 -9
- package/dist/lib/use-layout.d.ts +1 -1
- package/dist/lib/use-layout.d.ts.map +1 -1
- package/dist/lib/use-layout.js +4 -8
- package/dist/lib/use-list.d.ts +10 -2
- package/dist/lib/use-list.d.ts.map +1 -1
- package/dist/lib/use-list.js +21 -25
- package/dist/lib/use-mini.d.ts +1 -1
- package/dist/lib/use-mini.js +5 -9
- package/dist/lib/use-omnitable.d.ts +10 -2
- package/dist/lib/use-omnitable.d.ts.map +1 -1
- package/dist/lib/use-omnitable.js +18 -22
- package/dist/lib/use-processed-items.d.ts +5 -3
- package/dist/lib/use-processed-items.d.ts.map +1 -1
- package/dist/lib/use-processed-items.js +23 -27
- package/dist/lib/use-public-interface.js +16 -20
- package/dist/lib/use-resizable-columns.js +4 -8
- package/dist/lib/use-sort-and-group-options.d.ts +25 -2
- package/dist/lib/use-sort-and-group-options.d.ts.map +1 -1
- package/dist/lib/use-sort-and-group-options.js +12 -16
- package/dist/lib/use-track-size.d.ts +1 -1
- package/dist/lib/use-track-size.d.ts.map +1 -1
- package/dist/lib/use-track-size.js +2 -6
- package/dist/lib/use-tween-array.js +10 -14
- package/dist/lib/utils-amount.js +29 -25
- package/dist/lib/utils-data.js +8 -12
- package/dist/lib/utils-date.js +38 -55
- package/dist/lib/utils-datetime.js +22 -32
- package/dist/lib/utils-number.js +24 -34
- package/dist/lib/utils-time.js +34 -46
- package/dist/lib/utils.js +2 -6
- package/dist/ui-helpers/cosmoz-clear-button.js +5 -7
- package/package.json +1 -1
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const map_js_1 = require("lit-html/directives/map.js");
|
|
6
|
-
require("./cosmoz-omnitable-item-expand-line");
|
|
1
|
+
import { component } from '@pionjs/pion';
|
|
2
|
+
import { html } from 'lit-html';
|
|
3
|
+
import { map } from 'lit-html/directives/map.js';
|
|
4
|
+
import './cosmoz-omnitable-item-expand-line';
|
|
7
5
|
const ItemExpand = ({ columns, item, selected, expanded, groupOnColumn }) => {
|
|
8
|
-
return
|
|
6
|
+
return map(columns, (column) => html `<cosmoz-omnitable-item-expand-line
|
|
9
7
|
.column=${column}
|
|
10
8
|
?hidden=${column === groupOnColumn}
|
|
11
9
|
exportparts="item-expand-label, item-expand-value"
|
|
@@ -16,7 +14,7 @@ const ItemExpand = ({ columns, item, selected, expanded, groupOnColumn }) => {
|
|
|
16
14
|
})}</cosmoz-omnitable-item-expand-line
|
|
17
15
|
>`);
|
|
18
16
|
};
|
|
19
|
-
customElements.define('cosmoz-omnitable-item-expand',
|
|
17
|
+
customElements.define('cosmoz-omnitable-item-expand', component(ItemExpand, {
|
|
20
18
|
useShadowDOM: false,
|
|
21
19
|
}));
|
|
22
20
|
//# sourceMappingURL=cosmoz-omnitable-item-expand.js.map
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const pion_1 = require("@pionjs/pion");
|
|
4
|
-
const repeat_js_1 = require("lit-html/directives/repeat.js");
|
|
1
|
+
import { component, html } from '@pionjs/pion';
|
|
2
|
+
import { repeat } from 'lit-html/directives/repeat.js';
|
|
5
3
|
const renderCell = (column, data, onItemChange) => column.editable
|
|
6
4
|
? column.renderEditCell(column, data, onItemChange(column, data.item))
|
|
7
5
|
: column.renderCell(column, data);
|
|
8
|
-
const ItemRow = ({ columns, groupOnColumn, item, index, selected, expanded, onItemChange, }) =>
|
|
9
|
-
return
|
|
6
|
+
const ItemRow = ({ columns, groupOnColumn, item, index, selected, expanded, onItemChange, }) => repeat(columns, (column) => column.name, (column) => {
|
|
7
|
+
return html `<div
|
|
10
8
|
class="cell itemRow-cell ${column.cellClass ?? ''}"
|
|
11
9
|
part="cell itemRow-cell cell-${column.name} itemRow-cell-${column.name}"
|
|
12
10
|
?hidden="${column === groupOnColumn}"
|
|
@@ -17,5 +15,5 @@ const ItemRow = ({ columns, groupOnColumn, item, index, selected, expanded, onIt
|
|
|
17
15
|
${renderCell(column, { item, index, selected, expanded }, onItemChange)}
|
|
18
16
|
</div>`;
|
|
19
17
|
});
|
|
20
|
-
customElements.define('cosmoz-omnitable-item-row',
|
|
18
|
+
customElements.define('cosmoz-omnitable-item-row', component(ItemRow, { useShadowDOM: false }));
|
|
21
19
|
//# sourceMappingURL=cosmoz-omnitable-item-row.js.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const pion_1 = require("@pionjs/pion");
|
|
4
|
-
const styles = (0, pion_1.css) `
|
|
1
|
+
import { html, css, component } from '@pionjs/pion';
|
|
2
|
+
const styles = css `
|
|
5
3
|
:host {
|
|
6
4
|
max-width: 100%;
|
|
7
5
|
overflow-x: hidden;
|
|
@@ -46,10 +44,10 @@ const styles = (0, pion_1.css) `
|
|
|
46
44
|
`;
|
|
47
45
|
const Skeleton = ({ settingsConfig }) => {
|
|
48
46
|
const { columns, collapsed } = settingsConfig, showingColumns = columns.filter((column) => !collapsed.some((hidden) => hidden.name === column.name));
|
|
49
|
-
return
|
|
50
|
-
${Array.from({ length: 5 }, () =>
|
|
47
|
+
return html `<div class="skeleton">
|
|
48
|
+
${Array.from({ length: 5 }, () => html `<div>
|
|
51
49
|
<div class="checkbox"></div>
|
|
52
|
-
${showingColumns.map((col) =>
|
|
50
|
+
${showingColumns.map((col) => html `<div
|
|
53
51
|
class="cell"
|
|
54
52
|
part=${`cell-${col.name}`}
|
|
55
53
|
name=${col.name}
|
|
@@ -57,5 +55,5 @@ const Skeleton = ({ settingsConfig }) => {
|
|
|
57
55
|
</div>`)}
|
|
58
56
|
</div>`;
|
|
59
57
|
};
|
|
60
|
-
customElements.define('cosmoz-omnitable-skeleton',
|
|
58
|
+
customElements.define('cosmoz-omnitable-skeleton', component(Skeleton, { styleSheets: [styles] }));
|
|
61
59
|
//# sourceMappingURL=cosmoz-omnitable-skeleton.js.map
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkbox = void 0;
|
|
4
1
|
/* eslint-disable max-lines */
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { tagged as css } from '@neovici/cosmoz-utils';
|
|
3
|
+
export const checkbox = css `
|
|
7
4
|
.checkbox {
|
|
8
5
|
box-sizing: border-box;
|
|
9
6
|
width: 18px;
|
|
@@ -82,7 +79,7 @@ exports.checkbox = (0, cosmoz_utils_1.tagged) `
|
|
|
82
79
|
);
|
|
83
80
|
}
|
|
84
81
|
`;
|
|
85
|
-
|
|
82
|
+
export default css `
|
|
86
83
|
:host {
|
|
87
84
|
display: flex;
|
|
88
85
|
flex-direction: column;
|
|
@@ -455,7 +452,7 @@ exports.default = (0, cosmoz_utils_1.tagged) `
|
|
|
455
452
|
color: rgba(0, 0, 0, 0.54);
|
|
456
453
|
}
|
|
457
454
|
|
|
458
|
-
${
|
|
455
|
+
${checkbox}
|
|
459
456
|
|
|
460
457
|
.all {
|
|
461
458
|
margin-bottom: 6px;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export const actionSlots: import("lit-html"
|
|
1
|
+
export const actionSlots: import("lit-html").TemplateResult<1>;
|
|
2
2
|
export const actionSlotsPolymer: HTMLTemplateElement;
|
|
3
3
|
//# sourceMappingURL=cosmoz-omnitable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cosmoz-omnitable.d.ts","sourceRoot":"","sources":["../src/cosmoz-omnitable.js"],"names":[],"mappings":"AAgFa
|
|
1
|
+
{"version":3,"file":"cosmoz-omnitable.d.ts","sourceRoot":"","sources":["../src/cosmoz-omnitable.js"],"names":[],"mappings":"AAgFa,+DAA4D;AACxE,qDAA0E"}
|
package/dist/cosmoz-omnitable.js
CHANGED
|
@@ -1,43 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const cosmoz_omnitable_styles_1 = __importDefault(require("./cosmoz-omnitable-styles"));
|
|
22
|
-
const render_footer_1 = require("./lib/render-footer");
|
|
23
|
-
const render_header_1 = require("./lib/render-header");
|
|
24
|
-
const render_list_1 = require("./lib/render-list");
|
|
25
|
-
const use_omnitable_1 = require("./lib/use-omnitable");
|
|
26
|
-
require("./grouped-list/index.js");
|
|
1
|
+
import '@neovici/cosmoz-bottom-bar';
|
|
2
|
+
import '@polymer/iron-icon/iron-icon';
|
|
3
|
+
import '@polymer/iron-icons/iron-icons';
|
|
4
|
+
import './cosmoz-omnitable-column';
|
|
5
|
+
import './cosmoz-omnitable-columns';
|
|
6
|
+
import './cosmoz-omnitable-group-row';
|
|
7
|
+
import './cosmoz-omnitable-header-row';
|
|
8
|
+
import './cosmoz-omnitable-item-expand';
|
|
9
|
+
import './cosmoz-omnitable-item-row';
|
|
10
|
+
import { notifyProperty } from '@neovici/cosmoz-utils/hooks/use-notify-property';
|
|
11
|
+
import { component } from '@pionjs/pion';
|
|
12
|
+
import { html as polymerHtml } from '@polymer/polymer/lib/utils/html-tag';
|
|
13
|
+
import { html } from 'lit-html';
|
|
14
|
+
import { guard } from 'lit-html/directives/guard.js';
|
|
15
|
+
import styles from './cosmoz-omnitable-styles';
|
|
16
|
+
import { renderFooter } from './lib/render-footer';
|
|
17
|
+
import { renderHeader } from './lib/render-header';
|
|
18
|
+
import { renderList } from './lib/render-list';
|
|
19
|
+
import { useOmnitable } from './lib/use-omnitable';
|
|
20
|
+
import './grouped-list/index.js';
|
|
27
21
|
const shimCSS = (s) => window.ShadyCSS?.ApplyShim?.transformCssText?.(s) || s;
|
|
28
22
|
const Omnitable = (host) => {
|
|
29
|
-
const { header, list, footer } =
|
|
30
|
-
return
|
|
23
|
+
const { header, list, footer } = useOmnitable(host);
|
|
24
|
+
return html `
|
|
31
25
|
<style>
|
|
32
|
-
${
|
|
26
|
+
${guard([], () => shimCSS(styles))}
|
|
33
27
|
</style>
|
|
34
28
|
|
|
35
29
|
<div class="mainContainer">
|
|
36
|
-
${
|
|
30
|
+
${renderHeader(header)}
|
|
37
31
|
<div class="tableContent" id="tableContent">
|
|
38
|
-
${
|
|
32
|
+
${renderList(header, list)}
|
|
39
33
|
</div>
|
|
40
|
-
${
|
|
34
|
+
${renderFooter(footer)}
|
|
41
35
|
</div>
|
|
42
36
|
|
|
43
37
|
<div id="columns">
|
|
@@ -45,7 +39,7 @@ const Omnitable = (host) => {
|
|
|
45
39
|
</div>
|
|
46
40
|
`;
|
|
47
41
|
};
|
|
48
|
-
customElements.define('cosmoz-omnitable', class extends
|
|
42
|
+
customElements.define('cosmoz-omnitable', class extends component(Omnitable, {
|
|
49
43
|
observedAttributes: [
|
|
50
44
|
'hash-param',
|
|
51
45
|
'sort-on',
|
|
@@ -63,13 +57,13 @@ customElements.define('cosmoz-omnitable', class extends (0, pion_1.component)(Om
|
|
|
63
57
|
}) {
|
|
64
58
|
connectedCallback() {
|
|
65
59
|
super.connectedCallback();
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
notifyProperty(this, 'selectedItems', []);
|
|
61
|
+
notifyProperty(this, 'visibleData', []);
|
|
62
|
+
notifyProperty(this, 'sortedFilteredGroupedItems', []);
|
|
69
63
|
}
|
|
70
64
|
});
|
|
71
65
|
const tmplt = `
|
|
72
66
|
<slot name="actions" slot="actions"></slot>
|
|
73
67
|
`;
|
|
74
|
-
|
|
68
|
+
export const actionSlots = html(Object.assign([tmplt], { raw: [tmplt] })), actionSlotsPolymer = polymerHtml(Object.assign([tmplt], { raw: [tmplt] }));
|
|
75
69
|
//# sourceMappingURL=cosmoz-omnitable.js.map
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const lit_html_1 = require("lit-html");
|
|
1
|
+
import { render } from 'lit-html';
|
|
4
2
|
customElements.define('cosmoz-grouped-list-row', class Element extends HTMLElement {
|
|
5
3
|
get item() {
|
|
6
4
|
return this._item;
|
|
@@ -27,7 +25,7 @@ customElements.define('cosmoz-grouped-list-row', class Element extends HTMLEleme
|
|
|
27
25
|
if (this._item == null || this._index == null || this._renderFn == null) {
|
|
28
26
|
return;
|
|
29
27
|
}
|
|
30
|
-
|
|
28
|
+
render(this._renderFn(this._item, this._index), this);
|
|
31
29
|
}
|
|
32
30
|
});
|
|
33
31
|
//# sourceMappingURL=cosmoz-grouped-list-row.js.map
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const CosmozGroupedList = (host) => (0, use_cosmoz_grouped_list_js_1.renderCosmozGroupedList)((0, use_cosmoz_grouped_list_js_1.useCosmozGroupedList)(host));
|
|
6
|
-
customElements.define('cosmoz-grouped-list', (0, pion_1.component)(CosmozGroupedList, { useShadowDOM: false }));
|
|
1
|
+
import { renderCosmozGroupedList, useCosmozGroupedList, } from './use-cosmoz-grouped-list.js';
|
|
2
|
+
import { component } from '@pionjs/pion';
|
|
3
|
+
const CosmozGroupedList = (host) => renderCosmozGroupedList(useCosmozGroupedList(host));
|
|
4
|
+
customElements.define('cosmoz-grouped-list', component(CosmozGroupedList, { useShadowDOM: false }));
|
|
7
5
|
//# sourceMappingURL=cosmoz-grouped-list.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export function useCollapsibleItems(): {
|
|
2
|
-
state: any
|
|
3
|
-
signal: any;
|
|
4
|
-
toggleFold: any;
|
|
5
|
-
toggleCollapse: any;
|
|
2
|
+
state: WeakMap<object, any>;
|
|
3
|
+
signal: WeakMap<object, any>[];
|
|
4
|
+
toggleFold: (item: any, folded: any) => void;
|
|
5
|
+
toggleCollapse: (item: any, collapsed: any) => void;
|
|
6
6
|
};
|
|
7
7
|
//# sourceMappingURL=use-collapsible-items.d.ts.map
|
|
@@ -1,19 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const useCollapsibleItems = () => {
|
|
8
|
-
const { setItemState, state, signal } = (0, use_weak_state_1.useWeakState)(), toggleFold = (0, pion_1.useCallback)((item, folded) => {
|
|
9
|
-
if (!(0, utils_1.isGroup)(item)) {
|
|
1
|
+
import { useCallback } from '@pionjs/pion';
|
|
2
|
+
import { useWeakState } from './use-weak-state';
|
|
3
|
+
import { isGroup } from './utils';
|
|
4
|
+
export const useCollapsibleItems = () => {
|
|
5
|
+
const { setItemState, state, signal } = useWeakState(), toggleFold = useCallback((item, folded) => {
|
|
6
|
+
if (!isGroup(item)) {
|
|
10
7
|
return;
|
|
11
8
|
}
|
|
12
9
|
setItemState(item, (state) => ({
|
|
13
10
|
folded: folded !== undefined ? folded : !state.folded,
|
|
14
11
|
}));
|
|
15
|
-
}, []), toggleCollapse =
|
|
16
|
-
if (
|
|
12
|
+
}, []), toggleCollapse = useCallback((item, collapsed) => {
|
|
13
|
+
if (isGroup(item)) {
|
|
17
14
|
return;
|
|
18
15
|
}
|
|
19
16
|
setItemState(item, (state) => ({
|
|
@@ -27,5 +24,4 @@ const useCollapsibleItems = () => {
|
|
|
27
24
|
toggleCollapse,
|
|
28
25
|
};
|
|
29
26
|
};
|
|
30
|
-
exports.useCollapsibleItems = useCollapsibleItems;
|
|
31
27
|
//# sourceMappingURL=use-collapsible-items.js.map
|
|
@@ -9,7 +9,7 @@ export function renderCosmozGroupedList({ renderRow, flatData }: {
|
|
|
9
9
|
flatData: any[];
|
|
10
10
|
}): any;
|
|
11
11
|
export function useCosmozGroupedList(host: any): {
|
|
12
|
-
renderRow: any;
|
|
12
|
+
renderRow: (item: any, index: any) => any;
|
|
13
13
|
flatData: any;
|
|
14
14
|
};
|
|
15
15
|
//# sourceMappingURL=use-cosmoz-grouped-list.d.ts.map
|
|
@@ -1,37 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const use_selected_items_1 = require("./use-selected-items");
|
|
11
|
-
const utils_1 = require("./utils");
|
|
12
|
-
const virtualize_js_1 = require("@lit-labs/virtualizer/virtualize.js");
|
|
1
|
+
import { useImperativeApi } from '@neovici/cosmoz-utils/hooks/use-imperative-api';
|
|
2
|
+
import { useNotifyProperty } from '@neovici/cosmoz-utils/hooks/use-notify-property';
|
|
3
|
+
import { useCallback, useLayoutEffect, useMemo } from '@pionjs/pion';
|
|
4
|
+
import { html } from 'lit-html';
|
|
5
|
+
import './cosmoz-grouped-list-row';
|
|
6
|
+
import { useCollapsibleItems } from './use-collapsible-items';
|
|
7
|
+
import { useSelectedItems } from './use-selected-items';
|
|
8
|
+
import { byReference, isExpanded, isFolded, prepareData } from './utils';
|
|
9
|
+
import { virtualize } from '@lit-labs/virtualizer/virtualize.js';
|
|
13
10
|
const styles = {
|
|
14
11
|
host: { position: 'relative', display: 'flex', flexDirection: 'column' },
|
|
15
12
|
}, useCosmozGroupedList = (host) => {
|
|
16
|
-
const { data, renderItem, renderGroup, displayEmptyGroups, compareItemsFn =
|
|
13
|
+
const { data, renderItem, renderGroup, displayEmptyGroups, compareItemsFn = byReference, } = host, { toggleFold, toggleCollapse, state, signal } = useCollapsibleItems(),
|
|
17
14
|
// TODO: state changes trigger recalculation, which is slow (200ms with 10k items)
|
|
18
15
|
// it only makes sense to do it when a group is folded
|
|
19
16
|
// suggested fix: separate signal for item collapse and group fold
|
|
20
|
-
flatData =
|
|
17
|
+
flatData = useMemo(() => prepareData(data, displayEmptyGroups, state), [data, displayEmptyGroups, signal]), { selectedItems, isItemSelected, isGroupSelected, isSelected, select, deselect, selectOnly, selectAll, deselectAll, toggleSelect, toggleSelectTo, } = useSelectedItems({ initial: [], compareItemsFn, data, flatData }), renderRow = useCallback((item, index) => Array.isArray(item.items)
|
|
21
18
|
? renderGroup(item, index, {
|
|
22
19
|
selected: isGroupSelected(item, selectedItems),
|
|
23
|
-
folded:
|
|
20
|
+
folded: isFolded(item, state),
|
|
24
21
|
toggleSelect: (selected) => toggleSelect(item, typeof selected === 'boolean' ? selected : undefined),
|
|
25
22
|
toggleFold: () => toggleFold(item),
|
|
26
23
|
})
|
|
27
24
|
: renderItem(item, index, {
|
|
28
25
|
selected: selectedItems.includes(item),
|
|
29
|
-
expanded:
|
|
26
|
+
expanded: isExpanded(item, state),
|
|
30
27
|
toggleSelect: (selected) => toggleSelect(item, typeof selected === 'boolean' ? selected : undefined),
|
|
31
28
|
toggleCollapse: () => toggleCollapse(item),
|
|
32
29
|
}), [renderItem, renderGroup, selectedItems, toggleSelect, signal]);
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
useLayoutEffect(() => Object.assign(host.style, styles.host), []);
|
|
31
|
+
useNotifyProperty('selectedItems', selectedItems);
|
|
35
32
|
const api = {
|
|
36
33
|
toggleFold,
|
|
37
34
|
toggleCollapse,
|
|
@@ -46,10 +43,9 @@ const styles = {
|
|
|
46
43
|
toggleSelect,
|
|
47
44
|
toggleSelectTo,
|
|
48
45
|
};
|
|
49
|
-
|
|
46
|
+
useImperativeApi(api, Object.values(api));
|
|
50
47
|
return { renderRow, flatData };
|
|
51
48
|
};
|
|
52
|
-
exports.useCosmozGroupedList = useCosmozGroupedList;
|
|
53
49
|
/**
|
|
54
50
|
* @param {Object} params
|
|
55
51
|
* @param {Function} params.renderRow
|
|
@@ -57,14 +53,14 @@ exports.useCosmozGroupedList = useCosmozGroupedList;
|
|
|
57
53
|
* @returns {*}
|
|
58
54
|
*/
|
|
59
55
|
const renderCosmozGroupedList = ({ renderRow, flatData }) => {
|
|
60
|
-
return
|
|
56
|
+
return virtualize({
|
|
61
57
|
items: flatData,
|
|
62
|
-
renderItem: (item, index) =>
|
|
58
|
+
renderItem: (item, index) => html `<cosmoz-grouped-list-row
|
|
63
59
|
.item=${item}
|
|
64
60
|
.index=${index}
|
|
65
61
|
.renderFn=${renderRow}
|
|
66
62
|
></cosmoz-grouped-list-row>`,
|
|
67
63
|
});
|
|
68
64
|
};
|
|
69
|
-
|
|
65
|
+
export { renderCosmozGroupedList, useCosmozGroupedList };
|
|
70
66
|
//# sourceMappingURL=use-cosmoz-grouped-list.js.map
|
|
@@ -5,15 +5,15 @@ export function useSelectedItems({ initial, compareItemsFn, data, flatData, }: {
|
|
|
5
5
|
flatData: any;
|
|
6
6
|
}): {
|
|
7
7
|
selectedItems: any;
|
|
8
|
-
isItemSelected: any;
|
|
9
|
-
isGroupSelected: any;
|
|
10
|
-
isSelected: any;
|
|
11
|
-
select: any;
|
|
12
|
-
deselect: any;
|
|
13
|
-
selectOnly: any;
|
|
14
|
-
selectAll:
|
|
15
|
-
deselectAll:
|
|
16
|
-
toggleSelect: any;
|
|
17
|
-
toggleSelectTo: any;
|
|
8
|
+
isItemSelected: (item: any) => any;
|
|
9
|
+
isGroupSelected: (group: any) => any;
|
|
10
|
+
isSelected: (item: any) => any;
|
|
11
|
+
select: (item: any) => void;
|
|
12
|
+
deselect: (item: any) => void;
|
|
13
|
+
selectOnly: (item: any) => void;
|
|
14
|
+
selectAll: () => void;
|
|
15
|
+
deselectAll: () => void;
|
|
16
|
+
toggleSelect: (item: any, selected?: boolean) => void;
|
|
17
|
+
toggleSelectTo: (item: any, selected: any) => void;
|
|
18
18
|
};
|
|
19
19
|
//# sourceMappingURL=use-selected-items.d.ts.map
|
|
@@ -1,34 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const utils_1 = require("./utils");
|
|
6
|
-
const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
7
|
-
const [selectedItems, setSelectedItems] = (0, pion_1.useState)(initial), [lastSelection, setLastSelection] = (0, pion_1.useState)(),
|
|
1
|
+
import { useCallback, useEffect, useState } from '@pionjs/pion';
|
|
2
|
+
import { isGroup } from './utils';
|
|
3
|
+
export const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
4
|
+
const [selectedItems, setSelectedItems] = useState(initial), [lastSelection, setLastSelection] = useState(),
|
|
8
5
|
/**
|
|
9
6
|
* Check if item is selected.
|
|
10
7
|
* @param {object} item Item.
|
|
11
8
|
* @returns {boolean} Whether item is selected.
|
|
12
9
|
*/
|
|
13
|
-
isItemSelected =
|
|
10
|
+
isItemSelected = useCallback((item) => selectedItems.includes(item), [selectedItems]),
|
|
14
11
|
/**
|
|
15
12
|
* Check if group is selected.
|
|
16
13
|
* @param {object} group Group.
|
|
17
14
|
* @returns {boolean} Whether group is selected.
|
|
18
15
|
*/
|
|
19
|
-
isGroupSelected =
|
|
16
|
+
isGroupSelected = useCallback((group) => group?.items?.every(isItemSelected), [isItemSelected]),
|
|
20
17
|
/**
|
|
21
18
|
* Check if item.group is selected.
|
|
22
19
|
* @param {object} item Item.
|
|
23
20
|
* @returns {boolean} Whether item is selected.
|
|
24
21
|
*/
|
|
25
|
-
isSelected =
|
|
22
|
+
isSelected = useCallback((item) => isItemSelected(item) || isGroupSelected(item), [isItemSelected, isGroupSelected]),
|
|
26
23
|
/**
|
|
27
24
|
* Add an item/group to the list of selected items.
|
|
28
25
|
* @param {object} item Item to select.
|
|
29
26
|
* @returns {void}
|
|
30
27
|
*/
|
|
31
|
-
select =
|
|
28
|
+
select = useCallback((item) => {
|
|
32
29
|
const items = item.items ?? [item];
|
|
33
30
|
setSelectedItems((selection) => [
|
|
34
31
|
...selection,
|
|
@@ -41,11 +38,11 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
|
41
38
|
* @param {object} item Item to select.
|
|
42
39
|
* @returns {void}
|
|
43
40
|
*/
|
|
44
|
-
deselect =
|
|
41
|
+
deselect = useCallback((item) => {
|
|
45
42
|
const items = item.items ?? [item];
|
|
46
43
|
setSelectedItems((selection) => selection.filter((i) => !items.includes(i)));
|
|
47
44
|
setLastSelection(item);
|
|
48
|
-
}, []), selectOnly =
|
|
45
|
+
}, []), selectOnly = useCallback((item) => {
|
|
49
46
|
setSelectedItems(item.items?.slice() || [item]);
|
|
50
47
|
setLastSelection(item);
|
|
51
48
|
}, []),
|
|
@@ -53,7 +50,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
|
53
50
|
* Select all items.
|
|
54
51
|
* @returns {void}
|
|
55
52
|
*/
|
|
56
|
-
selectAll =
|
|
53
|
+
selectAll = useCallback(() => {
|
|
57
54
|
setSelectedItems(data.flatMap((item) => item.items || item));
|
|
58
55
|
setLastSelection(undefined);
|
|
59
56
|
}, [data]),
|
|
@@ -61,7 +58,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
|
61
58
|
* Deselect all selected items.
|
|
62
59
|
* @returns {void}
|
|
63
60
|
*/
|
|
64
|
-
deselectAll =
|
|
61
|
+
deselectAll = useCallback(() => {
|
|
65
62
|
setSelectedItems([]);
|
|
66
63
|
setLastSelection(undefined);
|
|
67
64
|
}, []),
|
|
@@ -71,7 +68,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
|
71
68
|
* @param {boolean=} selected Select or deselect, fallback to toggling.
|
|
72
69
|
* @returns {void}
|
|
73
70
|
*/
|
|
74
|
-
toggleSelect =
|
|
71
|
+
toggleSelect = useCallback((item, selected = !isSelected(item)) => selected ? select(item) : deselect(item), [isSelected]), toggleSelectTo = useCallback((item, selected) => {
|
|
75
72
|
const last = lastSelection
|
|
76
73
|
? flatData.findIndex((i) => compareItemsFn(i, lastSelection))
|
|
77
74
|
: -1;
|
|
@@ -80,7 +77,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
|
80
77
|
}
|
|
81
78
|
const [from, to] = [last, flatData.indexOf(item)].sort((a, b) => a - b);
|
|
82
79
|
flatData.slice(from, to + 1).forEach((item, i, items) => {
|
|
83
|
-
if (i > 0 && i < items.length - 1 &&
|
|
80
|
+
if (i > 0 && i < items.length - 1 && isGroup(item)) {
|
|
84
81
|
return;
|
|
85
82
|
}
|
|
86
83
|
toggleSelect(item, selected);
|
|
@@ -88,7 +85,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
|
88
85
|
setLastSelection(item);
|
|
89
86
|
}, [flatData, compareItemsFn, toggleSelect]);
|
|
90
87
|
// keep selected items across data updates
|
|
91
|
-
|
|
88
|
+
useEffect(() => setSelectedItems((selectedItems) => selectedItems.length > 0
|
|
92
89
|
? flatData.filter((i) => selectedItems.find((item) => compareItemsFn(i, item)))
|
|
93
90
|
: selectedItems), [flatData]);
|
|
94
91
|
return {
|
|
@@ -105,5 +102,4 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
|
|
|
105
102
|
toggleSelectTo,
|
|
106
103
|
};
|
|
107
104
|
};
|
|
108
|
-
exports.useSelectedItems = useSelectedItems;
|
|
109
105
|
//# sourceMappingURL=use-selected-items.js.map
|
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
const [wrapper, setState] = (0, pion_1.useState)(() => [new WeakMap()]), setItemState = (0, pion_1.useCallback)((item, newItemState) => setState(([state]) => {
|
|
8
|
-
const itemState = (0, utils_1.getItemState)(item, state);
|
|
9
|
-
Object.assign(itemState, (0, utils_1.callFn)(newItemState, itemState));
|
|
1
|
+
import { useCallback, useState } from '@pionjs/pion';
|
|
2
|
+
import { callFn, getItemState } from './utils';
|
|
3
|
+
export const useWeakState = () => {
|
|
4
|
+
const [wrapper, setState] = useState(() => [new WeakMap()]), setItemState = useCallback((item, newItemState) => setState(([state]) => {
|
|
5
|
+
const itemState = getItemState(item, state);
|
|
6
|
+
Object.assign(itemState, callFn(newItemState, itemState));
|
|
10
7
|
return [state];
|
|
11
8
|
}), []);
|
|
12
9
|
return {
|
|
@@ -15,5 +12,4 @@ const useWeakState = () => {
|
|
|
15
12
|
signal: wrapper,
|
|
16
13
|
};
|
|
17
14
|
};
|
|
18
|
-
exports.useWeakState = useWeakState;
|
|
19
15
|
//# sourceMappingURL=use-weak-state.js.map
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.byReference = exports.callFn = exports.isGroup = exports.isFolded = exports.isExpanded = exports.getItemState = exports.prepareData = exports.symbols = void 0;
|
|
4
1
|
const symbols = {
|
|
5
2
|
group: Symbol('group'),
|
|
6
3
|
}, getItemState = (item, itemsState) => {
|
|
@@ -56,12 +53,5 @@ prepareData = (data, displayEmptyGroups, itemsState) => {
|
|
|
56
53
|
}, []);
|
|
57
54
|
return flatData;
|
|
58
55
|
}, callFn = (fn, ...args) => (typeof fn === 'function' ? fn(...args) : fn), byReference = (a, b) => a === b;
|
|
59
|
-
|
|
60
|
-
exports.getItemState = getItemState;
|
|
61
|
-
exports.isExpanded = isExpanded;
|
|
62
|
-
exports.isFolded = isFolded;
|
|
63
|
-
exports.isGroup = isGroup;
|
|
64
|
-
exports.prepareData = prepareData;
|
|
65
|
-
exports.callFn = callFn;
|
|
66
|
-
exports.byReference = byReference;
|
|
56
|
+
export { symbols, prepareData, getItemState, isExpanded, isFolded, isGroup, callFn, byReference, };
|
|
67
57
|
//# sourceMappingURL=utils.js.map
|