@neovici/cosmoz-omnitable 13.3.0 → 13.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.
@@ -536,13 +536,15 @@ export default css`
536
536
  .itemRow-minis {
537
537
  display: flex;
538
538
  justify-content: space-between;
539
- margin: 0 8px 8px 8px;
539
+ margin: 14px 12px 12px 12px;
540
+ color: var(--cosmoz-omnitable-mini-color, #000);
540
541
  }
541
542
 
542
543
  :host([mini]) .itemRow {
543
- border-radius: 8px;
544
+ border-radius: 12px;
544
545
  border: 1px solid var(--cosmoz-omnitable-border-color, #e1e2e5);
545
546
  margin: 4px 8px;
547
+ padding-top: 2px;
546
548
  }
547
549
  :host([mini]) .itemRow:not([selected]) {
548
550
  background: var(--cosmoz-omnitable-mini-item-background, #fdfdfd);
@@ -7,7 +7,7 @@ import { useDOMColumns } from '../use-dom-columns';
7
7
  export default ({ settingsId, host }) => {
8
8
  const initial = useMemo(
9
9
  () => Object.fromEntries(sgProps.map((k) => [k, host[k]])),
10
- []
10
+ [],
11
11
  ),
12
12
  resetRef = useRef(),
13
13
  onReset = useCallback(() => {
@@ -19,7 +19,7 @@ export default ({ settingsId, host }) => {
19
19
  settingsId,
20
20
  settings,
21
21
  setSettings,
22
- onReset
22
+ onReset,
23
23
  ),
24
24
  { enabledColumns } = host,
25
25
  columns = useDOMColumns(host, { enabledColumns }),
@@ -31,14 +31,14 @@ export default ({ settingsId, host }) => {
31
31
  savedSettings,
32
32
  initial,
33
33
  }),
34
- [columns, settings, savedSettings]
34
+ [columns, settings, savedSettings],
35
35
  ),
36
36
  normalizedColumns = useMemo(
37
37
  () =>
38
38
  normalizedSettings.columns
39
39
  .map((s) => columns.find((c) => c.name === s.name))
40
40
  .filter(Boolean),
41
- [columns, ...normalizedSettings.columns.map((s) => s.name)]
41
+ [columns, ...normalizedSettings.columns.map((s) => s.name)],
42
42
  );
43
43
 
44
44
  return {
@@ -1,158 +1,167 @@
1
- import { useEffect, useLayoutEffect, useState } from '@pionjs/pion';
1
+ import { useLayoutEffect, useState } from '@pionjs/pion';
2
2
  import { memooize } from '@neovici/cosmoz-utils/memoize';
3
3
 
4
- const columnSymbol = Symbol('column'),
5
- verifyColumnSetup = (columns) => {
6
- let ok = true;
7
- const columnNames = columns.map((c) => c.name);
8
- // Check if column names are set
9
- columns.forEach((column) => {
10
- if (column.name != null) {
11
- return;
12
- }
13
- ok = false;
14
- // eslint-disable-next-line no-console
15
- console.error(
16
- 'The name attribute needs to be set on all columns! Missing on column',
17
- column,
18
- );
19
- });
20
-
21
- columns.forEach((column) => {
22
- if (
23
- columnNames.indexOf(column.name) ===
24
- columnNames.lastIndexOf(column.name)
25
- ) {
26
- return;
27
- }
28
- ok = false;
29
- // eslint-disable-next-line no-console
30
- console.error(
31
- 'The name attribute needs to be unique among all columns! Not unique on column',
32
- column,
33
- );
34
- });
35
- return ok;
36
- },
37
- // eslint-disable-next-line max-lines-per-function
38
- domColumnsToConfig = (host, { enabledColumns }) => {
39
- const domColumns = host.shadowRoot
40
- .querySelector('#columnsSlot')
41
- .assignedElements({ flatten: true })
42
- .filter((child) => child.isOmnitableColumn && !child.hidden);
43
-
44
- if (!verifyColumnSetup(domColumns)) {
45
- return [];
4
+ const columnSymbol = Symbol('column');
5
+ const verifyColumnSetup = (columns) => {
6
+ let ok = true;
7
+ const columnNames = columns.map((c) => c.name);
8
+ // Check if column names are set
9
+ columns.forEach((column) => {
10
+ if (column.name != null) {
11
+ return;
46
12
  }
47
-
48
- const columns = Array.isArray(enabledColumns)
49
- ? domColumns.filter((column) => enabledColumns.includes(column.name))
50
- : domColumns.filter((column) => !column.disabled);
51
-
52
- // eslint-disable-next-line max-lines-per-function
53
- return columns.map((column) => {
54
- const valuePath = column.valuePath ?? column.name;
55
-
56
- return {
57
- name: column.name,
58
- title: column.title,
59
-
60
- valuePath,
61
- groupOn: column.groupOn ?? valuePath,
62
- sortOn: column.sortOn ?? valuePath,
63
-
64
- minWidth: column.minWidth,
65
- width: column.width,
66
- flex: column.flex,
67
- priority: column.priority,
68
-
69
- getString: column.getString,
70
- getComparableValue: column.getComparableValue,
71
- serializeFilter: column.serializeFilter,
72
- deserializeFilter: column.deserializeFilter,
73
- toXlsxValue: column.toXlsxValue,
74
-
75
- renderHeader: column.renderHeader,
76
- renderCell: column.renderCell,
77
- renderEditCell: column.renderEditCell,
78
- renderGroup: column.renderGroup,
79
- cellTitleFn: column.cellTitleFn,
80
- getFilterFn: column.getFilterFn,
81
- headerCellClass: column.headerCellClass,
82
- cellClass: column.cellClass,
83
-
84
- editable: column.editable,
85
-
86
- values: column.values,
87
- source: memooize(column.computeSource),
88
-
89
- noLocalFilter: column.noLocalFilter,
90
-
91
- mini: column.mini,
92
- renderMini: column.renderMini,
93
-
94
- // @deprecated
95
- loading: column.loading,
96
- externalValues: column.externalValues,
97
- computeSource: column.computeSource,
98
-
99
- // boolean columns
100
- trueLabel: column.trueLabel,
101
- falseLabel: column.falseLabel,
102
-
103
- // list columns
104
- valueProperty: column.valueProperty,
105
- textProperty: column.textProperty,
106
- emptyLabel: column.emptyLabel,
107
- emptyValue: column.emptyValue,
108
-
109
- // range columns
110
- min: column.min,
111
- max: column.max,
112
- locale: column.locale,
113
- autoupdate: column.autoupdate,
114
-
115
- // number columns
116
- maximumFractionDigits: column.maximumFractionDigits,
117
- minimumFractionDigits: column.minimumFractionDigits,
118
-
119
- // amount columns
120
- currency: column.currency,
121
- rates: column.rates,
122
- autodetect: column.autodetect,
123
-
124
- // treenode columns
125
- ownerTree: column.ownerTree,
126
- keyProperty: column.keyProperty,
127
-
128
- ...column.getConfig?.(column),
129
-
130
- [columnSymbol]: column,
131
- };
132
- });
133
- },
134
- useDOMColumns = (host, { enabledColumns }) => {
135
- const [columns, setColumns] = useState([]);
136
-
137
- useLayoutEffect(() => {
138
- setColumns(domColumnsToConfig(host, { enabledColumns }));
139
- }, []);
140
-
141
- useEffect(() => {
142
- const slot = host.shadowRoot.querySelector('#columnsSlot'),
143
- handler = () =>
144
- setColumns(domColumnsToConfig(host, { enabledColumns }));
145
-
146
- handler();
147
- slot.addEventListener('slotchange', handler);
148
- host.addEventListener('cosmoz-column-prop-changed', handler);
149
- return () => {
150
- slot.removeEventListener('slotchange', handler);
151
- host.removeEventListener('cosmoz-column-prop-changed', handler);
152
- };
153
- }, [enabledColumns]);
154
-
155
- return columns;
13
+ ok = false;
14
+ // eslint-disable-next-line no-console
15
+ console.error(
16
+ 'The name attribute needs to be set on all columns! Missing on column',
17
+ column,
18
+ );
19
+ });
20
+
21
+ columns.forEach((column) => {
22
+ if (
23
+ columnNames.indexOf(column.name) === columnNames.lastIndexOf(column.name)
24
+ ) {
25
+ return;
26
+ }
27
+ ok = false;
28
+ // eslint-disable-next-line no-console
29
+ console.error(
30
+ 'The name attribute needs to be unique among all columns! Not unique on column',
31
+ column,
32
+ );
33
+ });
34
+ return ok;
35
+ };
36
+
37
+ // eslint-disable-next-line max-lines-per-function
38
+ const normalizeColumn = (column) => {
39
+ const valuePath = column.valuePath ?? column.name;
40
+
41
+ return {
42
+ name: column.name,
43
+ title: column.title,
44
+
45
+ valuePath,
46
+ groupOn: column.groupOn ?? valuePath,
47
+ sortOn: column.sortOn ?? valuePath,
48
+
49
+ minWidth: column.minWidth,
50
+ width: column.width,
51
+ flex: column.flex,
52
+ priority: column.priority,
53
+
54
+ getString: column.getString,
55
+ getComparableValue: column.getComparableValue,
56
+ serializeFilter: column.serializeFilter,
57
+ deserializeFilter: column.deserializeFilter,
58
+ toXlsxValue: column.toXlsxValue,
59
+
60
+ renderHeader: column.renderHeader,
61
+ renderCell: column.renderCell,
62
+ renderEditCell: column.renderEditCell,
63
+ renderGroup: column.renderGroup,
64
+ cellTitleFn: column.cellTitleFn,
65
+ getFilterFn: column.getFilterFn,
66
+ headerCellClass: column.headerCellClass,
67
+ cellClass: column.cellClass,
68
+
69
+ editable: column.editable,
70
+
71
+ values: column.values,
72
+ source: memooize(column.computeSource),
73
+
74
+ noLocalFilter: column.noLocalFilter,
75
+
76
+ mini: column.mini,
77
+ renderMini: column.renderMini,
78
+
79
+ // @deprecated
80
+ loading: column.loading,
81
+ externalValues: column.externalValues,
82
+ computeSource: column.computeSource,
83
+
84
+ // boolean columns
85
+ trueLabel: column.trueLabel,
86
+ falseLabel: column.falseLabel,
87
+
88
+ // list columns
89
+ valueProperty: column.valueProperty,
90
+ textProperty: column.textProperty,
91
+ emptyLabel: column.emptyLabel,
92
+ emptyValue: column.emptyValue,
93
+
94
+ // range columns
95
+ min: column.min,
96
+ max: column.max,
97
+ locale: column.locale,
98
+ autoupdate: column.autoupdate,
99
+
100
+ // number columns
101
+ maximumFractionDigits: column.maximumFractionDigits,
102
+ minimumFractionDigits: column.minimumFractionDigits,
103
+
104
+ // amount columns
105
+ currency: column.currency,
106
+ rates: column.rates,
107
+ autodetect: column.autodetect,
108
+
109
+ // treenode columns
110
+ ownerTree: column.ownerTree,
111
+ keyProperty: column.keyProperty,
112
+
113
+ ...column.getConfig?.(column),
114
+
115
+ [columnSymbol]: column,
156
116
  };
117
+ };
118
+
119
+ const isVisibleColumn = (child) => child.isOmnitableColumn && !child.hidden;
120
+
121
+ const collectDomColumns = (slot) => {
122
+ const domColumns = slot
123
+ .assignedElements({ flatten: true })
124
+ .filter(isVisibleColumn);
125
+
126
+ if (!verifyColumnSetup(domColumns)) return [];
127
+ return domColumns;
128
+ };
129
+
130
+ const normalizeColumns = (domColumns, enabledColumns) => {
131
+ const columns = Array.isArray(enabledColumns)
132
+ ? domColumns.filter((column) => enabledColumns.includes(column.name))
133
+ : domColumns.filter((column) => !column.disabled);
134
+
135
+ return columns.map(normalizeColumn);
136
+ };
137
+
138
+ export const useDOMColumns = (host, { enabledColumns }) => {
139
+ const [columns, setColumns] = useState([]);
140
+
141
+ useLayoutEffect(() => {
142
+ let sched;
143
+ const slot = host.shadowRoot.querySelector('#columnsSlot');
144
+ const update = () => {
145
+ setColumns(normalizeColumns(collectDomColumns(slot), enabledColumns));
146
+ };
147
+ const scheduleUpdate = () => {
148
+ cancelAnimationFrame(sched);
149
+ sched = requestAnimationFrame(update);
150
+ };
151
+
152
+ scheduleUpdate();
153
+
154
+ slot.addEventListener('slotchange', scheduleUpdate);
155
+ host.addEventListener('cosmoz-column-prop-changed', scheduleUpdate);
156
+
157
+ return () => {
158
+ slot.removeEventListener('slotchange', scheduleUpdate);
159
+ host.removeEventListener('cosmoz-column-prop-changed', scheduleUpdate);
160
+ cancelAnimationFrame(sched);
161
+ };
162
+ }, [enabledColumns]);
163
+
164
+ return columns;
165
+ };
157
166
 
158
- export { columnSymbol, useDOMColumns };
167
+ export { columnSymbol };
@@ -27,7 +27,7 @@ export const useFastLayout = ({
27
27
  tweenedlayout = useTweenArray(layout, resizeSpeedFactor),
28
28
  layoutCss = useMemo(
29
29
  () => toCss(tweenedlayout, settings.columns),
30
- [tweenedlayout],
30
+ [tweenedlayout, settings.columns],
31
31
  ),
32
32
  collapsedColumns = useMemo(
33
33
  () =>
package/lib/use-list.js CHANGED
@@ -27,7 +27,10 @@ const renderMinis = (item) => (columns) =>
27
27
  <div class="itemRow-minis" part="item-minis">
28
28
  ${columns.map(
29
29
  (column) =>
30
- html`<div class="itemRow-mini" part="item-mini">
30
+ html`<div
31
+ class="itemRow-mini"
32
+ part="item-mini item-mini-${column.name}"
33
+ >
31
34
  ${(column.renderMini ?? column.renderCell)(column, { item })}
32
35
  </div>`,
33
36
  )}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neovici/cosmoz-omnitable",
3
- "version": "13.3.0",
3
+ "version": "13.5.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"
@@ -30,7 +30,7 @@
30
30
  "start": "wds",
31
31
  "test": "wtr --coverage",
32
32
  "test:watch": "wtr --watch",
33
- "prepare": "husky install"
33
+ "prepare": "husky"
34
34
  },
35
35
  "release": {
36
36
  "plugins": [
@@ -80,8 +80,8 @@
80
80
  "lit-html": "^2.0.0 || ^3.0.0"
81
81
  },
82
82
  "devDependencies": {
83
- "@commitlint/cli": "^18.0.0",
84
- "@commitlint/config-conventional": "^18.0.0",
83
+ "@commitlint/cli": "^19.0.0",
84
+ "@commitlint/config-conventional": "^19.0.0",
85
85
  "@neovici/cfg": "^1.18.0",
86
86
  "@neovici/cosmoz-viewinfo": "^4.0.0",
87
87
  "@open-wc/testing": "^4.0.0",
@@ -92,8 +92,8 @@
92
92
  "@polymer/paper-toggle-button": "^3.0.0",
93
93
  "@semantic-release/changelog": "^6.0.0",
94
94
  "@semantic-release/git": "^10.0.0",
95
- "husky": "^8.0.0",
96
- "semantic-release": "^22.0.0",
97
- "sinon": "^17.0.0"
95
+ "husky": "^9.0.0",
96
+ "semantic-release": "^23.0.0",
97
+ "sinon": "^18.0.0"
98
98
  }
99
99
  }