@neovici/cosmoz-omnitable 12.1.0 → 12.2.1
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/cosmoz-omnitable-header-row.js +18 -0
- package/cosmoz-omnitable-styles.js +38 -0
- package/lib/settings/cosmoz-omnitable-settings.js +1 -2
- package/lib/settings/cosmoz-omnitable-sort-group.js +74 -0
- package/lib/use-public-interface.js +2 -0
- package/package.json +1 -1
- package/lib/settings/cosmoz-omnitable-group.js +0 -51
- package/lib/settings/cosmoz-omnitable-sort.js +0 -23
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { html, component } from 'haunted';
|
|
2
2
|
import { repeat } from 'lit-html/directives/repeat.js';
|
|
3
3
|
import './lib/cosmoz-omnitable-resize-nub';
|
|
4
|
+
import { render } from './lib/settings/cosmoz-omnitable-sort-group';
|
|
4
5
|
|
|
5
6
|
const /* eslint-disable-next-line max-lines-per-function */
|
|
6
7
|
renderHeaderRow = ({
|
|
@@ -27,6 +28,23 @@ const /* eslint-disable-next-line max-lines-per-function */
|
|
|
27
28
|
(state) => setFilterState(column.name, state),
|
|
28
29
|
column.source(column, data)
|
|
29
30
|
),
|
|
31
|
+
html` <sort-and-group-consumer
|
|
32
|
+
style="display:contents"
|
|
33
|
+
.render=${({
|
|
34
|
+
sortOn: on,
|
|
35
|
+
setSortOn: setOn,
|
|
36
|
+
descending,
|
|
37
|
+
setDescending,
|
|
38
|
+
} = {}) =>
|
|
39
|
+
render({
|
|
40
|
+
on,
|
|
41
|
+
setOn,
|
|
42
|
+
descending,
|
|
43
|
+
setDescending,
|
|
44
|
+
column,
|
|
45
|
+
})}
|
|
46
|
+
>
|
|
47
|
+
</sort-and-group-consumer>`,
|
|
30
48
|
]}
|
|
31
49
|
</div>`,
|
|
32
50
|
html`<cosmoz-omnitable-resize-nub
|
|
@@ -435,4 +435,42 @@ export default `
|
|
|
435
435
|
.expand:hover, .fold:hover {
|
|
436
436
|
color: #000;
|
|
437
437
|
}
|
|
438
|
+
.sg {
|
|
439
|
+
display: inline-flex;
|
|
440
|
+
width: 10px;
|
|
441
|
+
cursor: pointer;
|
|
442
|
+
align-items: center;
|
|
443
|
+
margin-top: 18px;
|
|
444
|
+
overflow: hidden;
|
|
445
|
+
flex: none;
|
|
446
|
+
background: none;
|
|
447
|
+
border: none;
|
|
448
|
+
outline: none;
|
|
449
|
+
color: inherit;
|
|
450
|
+
padding: 0;
|
|
451
|
+
}
|
|
452
|
+
.sg span {display: none}
|
|
453
|
+
.sg svg {
|
|
454
|
+
display: block;
|
|
455
|
+
}
|
|
456
|
+
.sg[data-on] {
|
|
457
|
+
color: var(
|
|
458
|
+
--cosmoz-omnitable-checkbox-checked-color,
|
|
459
|
+
var(--primary-color)
|
|
460
|
+
);
|
|
461
|
+
}
|
|
462
|
+
.sg:not([data-on='desc']) {
|
|
463
|
+
transform: scaleY(-1);
|
|
464
|
+
}
|
|
465
|
+
:not(:hover) > * > .sg:not([data-on]) {
|
|
466
|
+
display: none;
|
|
467
|
+
}
|
|
468
|
+
.header-cell {
|
|
469
|
+
display: inline-flex;
|
|
470
|
+
position: relative;
|
|
471
|
+
}
|
|
472
|
+
.header-cell :not(.sg) {
|
|
473
|
+
min-width: 0;
|
|
474
|
+
flex: auto;
|
|
475
|
+
}
|
|
438
476
|
`;
|
|
@@ -4,8 +4,7 @@ import { _ } from '@neovici/cosmoz-i18next';
|
|
|
4
4
|
import { isEmpty } from '@neovici/cosmoz-utils/template';
|
|
5
5
|
import { defaultPlacement } from '@neovici/cosmoz-dropdown';
|
|
6
6
|
import '@neovici/cosmoz-collapse';
|
|
7
|
-
import sort from './cosmoz-omnitable-sort';
|
|
8
|
-
import group from './cosmoz-omnitable-group';
|
|
7
|
+
import { sort, group } from './cosmoz-omnitable-sort-group';
|
|
9
8
|
import style, { dropdown as dropdownStyle } from './style.css';
|
|
10
9
|
import useSettingsUi from './use-settings-ui';
|
|
11
10
|
import { close, pull, arrow } from '../icons';
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { html } from 'haunted';
|
|
2
|
+
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
3
|
+
import { triangle } from '../icons';
|
|
4
|
+
|
|
5
|
+
export const render = ({ column, on, descending, setOn, setDescending }) => {
|
|
6
|
+
const { name, title } = column ?? {};
|
|
7
|
+
return html`<button
|
|
8
|
+
class="sg"
|
|
9
|
+
title=${title}
|
|
10
|
+
data-on=${ifDefined(
|
|
11
|
+
(name === on && (descending ? 'desc' : 'asc')) || undefined
|
|
12
|
+
)}
|
|
13
|
+
@click=${(e) => {
|
|
14
|
+
const on = e.currentTarget?.dataset.on;
|
|
15
|
+
if (!on) {
|
|
16
|
+
setOn(name);
|
|
17
|
+
setDescending(false);
|
|
18
|
+
}
|
|
19
|
+
if (on === 'asc') {
|
|
20
|
+
setDescending(true);
|
|
21
|
+
} else if (on === 'desc') {
|
|
22
|
+
setOn();
|
|
23
|
+
setDescending(false);
|
|
24
|
+
}
|
|
25
|
+
}}
|
|
26
|
+
>
|
|
27
|
+
<span>${title}</span> ${triangle}
|
|
28
|
+
</button>`;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export const renderAll = ({ columns, ...thru }) =>
|
|
32
|
+
columns?.map((column) => render({ column, ...thru }));
|
|
33
|
+
|
|
34
|
+
export const group = () => html`
|
|
35
|
+
<sort-and-group-consumer
|
|
36
|
+
class="sgs"
|
|
37
|
+
.render=${({
|
|
38
|
+
columns,
|
|
39
|
+
groupOn: on,
|
|
40
|
+
setGroupOn: setOn,
|
|
41
|
+
groupOnDescending: descending,
|
|
42
|
+
setGroupOnDescending: setDescending,
|
|
43
|
+
} = {}) =>
|
|
44
|
+
renderAll({
|
|
45
|
+
columns: columns?.filter?.((c) => c['groupOn']),
|
|
46
|
+
on,
|
|
47
|
+
setOn,
|
|
48
|
+
descending,
|
|
49
|
+
setDescending,
|
|
50
|
+
})}
|
|
51
|
+
>
|
|
52
|
+
</sort-and-group-consumer>
|
|
53
|
+
`;
|
|
54
|
+
|
|
55
|
+
export const sort = () => html`
|
|
56
|
+
<sort-and-group-consumer
|
|
57
|
+
class="sgs"
|
|
58
|
+
.render=${({
|
|
59
|
+
columns,
|
|
60
|
+
sortOn: on,
|
|
61
|
+
setSortOn: setOn,
|
|
62
|
+
descending,
|
|
63
|
+
setDescending,
|
|
64
|
+
} = {}) =>
|
|
65
|
+
renderAll({
|
|
66
|
+
columns: columns?.filter?.((c) => c['sortOn']),
|
|
67
|
+
on,
|
|
68
|
+
setOn,
|
|
69
|
+
descending,
|
|
70
|
+
setDescending,
|
|
71
|
+
})}
|
|
72
|
+
>
|
|
73
|
+
</sort-and-group-consumer>
|
|
74
|
+
`;
|
|
@@ -72,6 +72,8 @@ export const usePublicInterface = ({ host, visibleData, ...api }) => {
|
|
|
72
72
|
api.sortedFilteredGroupedItems
|
|
73
73
|
);
|
|
74
74
|
useNotifyProperty('selectedItems', api.selectedItems);
|
|
75
|
+
useNotifyProperty('sortOn', api.sortOn)
|
|
76
|
+
useNotifyProperty('descending', api.descending)
|
|
75
77
|
|
|
76
78
|
useImperativeApi(
|
|
77
79
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@neovici/cosmoz-omnitable",
|
|
3
|
-
"version": "12.1
|
|
3
|
+
"version": "12.2.1",
|
|
4
4
|
"description": "[](https://travis-ci.org/Neovici/cosmoz-omnitable)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components"
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { html } from 'haunted';
|
|
2
|
-
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
3
|
-
import { triangle } from '../icons';
|
|
4
|
-
|
|
5
|
-
export const render = ({ columns, on, descending, setOn, setDescending }) =>
|
|
6
|
-
columns?.map(
|
|
7
|
-
(c) =>
|
|
8
|
-
html`<button
|
|
9
|
-
class="sg"
|
|
10
|
-
title=${c.title}
|
|
11
|
-
data-on=${ifDefined(
|
|
12
|
-
(c.name === on && (descending ? 'desc' : 'asc')) || undefined
|
|
13
|
-
)}
|
|
14
|
-
@click=${(e) => {
|
|
15
|
-
const on = e.currentTarget?.dataset.on;
|
|
16
|
-
if (!on) {
|
|
17
|
-
setOn(c.name);
|
|
18
|
-
setDescending(false);
|
|
19
|
-
}
|
|
20
|
-
if (on === 'asc') {
|
|
21
|
-
setDescending(true);
|
|
22
|
-
} else if (on === 'desc') {
|
|
23
|
-
setOn();
|
|
24
|
-
setDescending(false);
|
|
25
|
-
}
|
|
26
|
-
}}
|
|
27
|
-
>
|
|
28
|
-
<span>${c.title}</span> ${triangle}
|
|
29
|
-
</button>`
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
export default () => html`
|
|
33
|
-
<sort-and-group-consumer
|
|
34
|
-
class="sgs"
|
|
35
|
-
.render=${({
|
|
36
|
-
columns,
|
|
37
|
-
groupOn: on,
|
|
38
|
-
setGroupOn: setOn,
|
|
39
|
-
groupOnDescending: descending,
|
|
40
|
-
setGroupOnDescending: setDescending,
|
|
41
|
-
} = {}) =>
|
|
42
|
-
render({
|
|
43
|
-
columns: columns?.filter?.((c) => c['groupOn']),
|
|
44
|
-
on,
|
|
45
|
-
setOn,
|
|
46
|
-
descending,
|
|
47
|
-
setDescending,
|
|
48
|
-
})}
|
|
49
|
-
>
|
|
50
|
-
</sort-and-group-consumer>
|
|
51
|
-
`;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { html } from 'haunted';
|
|
2
|
-
import { render } from './cosmoz-omnitable-group';
|
|
3
|
-
|
|
4
|
-
export default () => html`
|
|
5
|
-
<sort-and-group-consumer
|
|
6
|
-
class="sgs"
|
|
7
|
-
.render=${({
|
|
8
|
-
columns,
|
|
9
|
-
sortOn: on,
|
|
10
|
-
setSortOn: setOn,
|
|
11
|
-
descending,
|
|
12
|
-
setDescending,
|
|
13
|
-
} = {}) =>
|
|
14
|
-
render({
|
|
15
|
-
columns: columns?.filter?.((c) => c['sortOn']),
|
|
16
|
-
on,
|
|
17
|
-
setOn,
|
|
18
|
-
descending,
|
|
19
|
-
setDescending,
|
|
20
|
-
})}
|
|
21
|
-
>
|
|
22
|
-
</sort-and-group-consumer>
|
|
23
|
-
`;
|