@neovici/cosmoz-omnitable 12.1.0 → 12.2.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.
@@ -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
+ `;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neovici/cosmoz-omnitable",
3
- "version": "12.1.0",
3
+ "version": "12.2.0",
4
4
  "description": "[![Build Status](https://travis-ci.org/Neovici/cosmoz-omnitable.svg?branch=master)](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
- `;