@neovici/cosmoz-omnitable 14.14.2 → 14.15.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.d.ts +2 -0
- package/dist/cosmoz-omnitable-column-amount.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-amount.js +113 -0
- package/dist/cosmoz-omnitable-column-autocomplete.d.ts +6 -0
- package/dist/cosmoz-omnitable-column-autocomplete.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-autocomplete.js +87 -0
- package/dist/cosmoz-omnitable-column-boolean.d.ts +17 -0
- package/dist/cosmoz-omnitable-column-boolean.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-boolean.js +105 -0
- package/dist/cosmoz-omnitable-column-date.d.ts +2 -0
- package/dist/cosmoz-omnitable-column-date.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-date.js +97 -0
- package/dist/cosmoz-omnitable-column-datetime.d.ts +2 -0
- package/dist/cosmoz-omnitable-column-datetime.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-datetime.js +106 -0
- package/dist/cosmoz-omnitable-column-list-data.d.ts +2 -0
- package/dist/cosmoz-omnitable-column-list-data.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-list-data.js +123 -0
- package/dist/cosmoz-omnitable-column-list-horizontal.d.ts +2 -0
- package/dist/cosmoz-omnitable-column-list-horizontal.d.ts.map +1 -0
- package/{cosmoz-omnitable-column-list-horizontal.js → dist/cosmoz-omnitable-column-list-horizontal.js} +15 -37
- package/dist/cosmoz-omnitable-column-list-mixin.d.ts +59 -0
- package/dist/cosmoz-omnitable-column-list-mixin.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-list-mixin.js +139 -0
- package/dist/cosmoz-omnitable-column-list.d.ts +2 -0
- package/dist/cosmoz-omnitable-column-list.d.ts.map +1 -0
- package/{cosmoz-omnitable-column-list.js → dist/cosmoz-omnitable-column-list.js} +28 -47
- package/dist/cosmoz-omnitable-column-mixin.d.ts +161 -0
- package/dist/cosmoz-omnitable-column-mixin.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-mixin.js +121 -0
- package/dist/cosmoz-omnitable-column-number.d.ts +2 -0
- package/dist/cosmoz-omnitable-column-number.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-number.js +112 -0
- package/dist/cosmoz-omnitable-column-time.d.ts +2 -0
- package/dist/cosmoz-omnitable-column-time.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column-time.js +102 -0
- package/dist/cosmoz-omnitable-column.d.ts +2 -0
- package/dist/cosmoz-omnitable-column.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-column.js +75 -0
- package/dist/cosmoz-omnitable-columns.d.ts +2 -0
- package/dist/cosmoz-omnitable-columns.d.ts.map +1 -0
- package/{cosmoz-omnitable-columns.js → dist/cosmoz-omnitable-columns.js} +1 -0
- package/dist/cosmoz-omnitable-group-row.d.ts +2 -0
- package/dist/cosmoz-omnitable-group-row.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-group-row.js +15 -0
- package/dist/cosmoz-omnitable-header-row.d.ts +2 -0
- package/dist/cosmoz-omnitable-header-row.d.ts.map +1 -0
- package/{cosmoz-omnitable-header-row.js → dist/cosmoz-omnitable-header-row.js} +12 -45
- package/dist/cosmoz-omnitable-item-expand-line.d.ts +2 -0
- package/dist/cosmoz-omnitable-item-expand-line.d.ts.map +1 -0
- package/{cosmoz-omnitable-item-expand-line.js → dist/cosmoz-omnitable-item-expand-line.js} +4 -9
- package/dist/cosmoz-omnitable-item-expand.d.ts +2 -0
- package/dist/cosmoz-omnitable-item-expand.d.ts.map +1 -0
- package/{cosmoz-omnitable-item-expand.js → dist/cosmoz-omnitable-item-expand.js} +10 -18
- package/dist/cosmoz-omnitable-item-row.d.ts +2 -0
- package/dist/cosmoz-omnitable-item-row.d.ts.map +1 -0
- package/dist/cosmoz-omnitable-item-row.js +19 -0
- package/dist/cosmoz-omnitable-skeleton.d.ts +2 -0
- package/dist/cosmoz-omnitable-skeleton.d.ts.map +1 -0
- package/{cosmoz-omnitable-skeleton.js → dist/cosmoz-omnitable-skeleton.js} +9 -25
- package/dist/cosmoz-omnitable-styles.d.ts +4 -0
- package/dist/cosmoz-omnitable-styles.d.ts.map +1 -0
- package/{cosmoz-omnitable-styles.js → dist/cosmoz-omnitable-styles.js} +3 -4
- package/dist/cosmoz-omnitable.d.ts +3 -0
- package/dist/cosmoz-omnitable.d.ts.map +1 -0
- package/{cosmoz-omnitable.js → dist/cosmoz-omnitable.js} +27 -40
- package/dist/grouped-list/cosmoz-grouped-list-row.d.ts +2 -0
- package/dist/grouped-list/cosmoz-grouped-list-row.d.ts.map +1 -0
- package/dist/grouped-list/cosmoz-grouped-list-row.js +31 -0
- package/dist/grouped-list/cosmoz-grouped-list.d.ts +2 -0
- package/dist/grouped-list/cosmoz-grouped-list.d.ts.map +1 -0
- package/dist/grouped-list/cosmoz-grouped-list.js +5 -0
- package/dist/grouped-list/index.d.ts +2 -0
- package/dist/grouped-list/index.d.ts.map +1 -0
- package/{grouped-list → dist/grouped-list}/index.js +1 -0
- package/dist/grouped-list/use-collapsible-items.d.ts +7 -0
- package/dist/grouped-list/use-collapsible-items.d.ts.map +1 -0
- package/dist/grouped-list/use-collapsible-items.js +27 -0
- package/dist/grouped-list/use-cosmoz-grouped-list.d.ts +15 -0
- package/dist/grouped-list/use-cosmoz-grouped-list.d.ts.map +1 -0
- package/dist/grouped-list/use-cosmoz-grouped-list.js +66 -0
- package/dist/grouped-list/use-selected-items.d.ts +19 -0
- package/dist/grouped-list/use-selected-items.d.ts.map +1 -0
- package/dist/grouped-list/use-selected-items.js +105 -0
- package/dist/grouped-list/use-weak-state.d.ts +6 -0
- package/dist/grouped-list/use-weak-state.d.ts.map +1 -0
- package/dist/grouped-list/use-weak-state.js +15 -0
- package/dist/grouped-list/utils.d.ts +11 -0
- package/dist/grouped-list/utils.d.ts.map +1 -0
- package/dist/grouped-list/utils.js +57 -0
- package/dist/lib/compute-layout.d.ts +3 -0
- package/dist/lib/compute-layout.d.ts.map +1 -0
- package/dist/lib/compute-layout.js +46 -0
- package/dist/lib/cosmoz-omnitable-amount-range-input.d.ts +2 -0
- package/dist/lib/cosmoz-omnitable-amount-range-input.d.ts.map +1 -0
- package/dist/lib/cosmoz-omnitable-amount-range-input.js +304 -0
- package/dist/lib/cosmoz-omnitable-date-input-mixin.d.ts +2 -0
- package/dist/lib/cosmoz-omnitable-date-input-mixin.d.ts.map +1 -0
- package/dist/lib/cosmoz-omnitable-date-input-mixin.js +149 -0
- package/dist/lib/cosmoz-omnitable-date-range-input.d.ts +2 -0
- package/dist/lib/cosmoz-omnitable-date-range-input.d.ts.map +1 -0
- package/{lib → dist/lib}/cosmoz-omnitable-date-range-input.js +32 -41
- package/dist/lib/cosmoz-omnitable-datetime-range-input.d.ts +2 -0
- package/dist/lib/cosmoz-omnitable-datetime-range-input.d.ts.map +1 -0
- package/{lib → dist/lib}/cosmoz-omnitable-datetime-range-input.js +27 -38
- package/dist/lib/cosmoz-omnitable-number-range-input.d.ts +2 -0
- package/dist/lib/cosmoz-omnitable-number-range-input.d.ts.map +1 -0
- package/{lib → dist/lib}/cosmoz-omnitable-number-range-input.js +73 -83
- package/dist/lib/cosmoz-omnitable-range-input-mixin.d.ts +2 -0
- package/dist/lib/cosmoz-omnitable-range-input-mixin.d.ts.map +1 -0
- package/dist/lib/cosmoz-omnitable-range-input-mixin.js +337 -0
- package/dist/lib/cosmoz-omnitable-resize-nub.d.ts +2 -0
- package/dist/lib/cosmoz-omnitable-resize-nub.d.ts.map +1 -0
- package/dist/lib/cosmoz-omnitable-resize-nub.js +33 -0
- package/dist/lib/cosmoz-omnitable-time-range-input.d.ts +2 -0
- package/dist/lib/cosmoz-omnitable-time-range-input.d.ts.map +1 -0
- package/dist/lib/cosmoz-omnitable-time-range-input.js +125 -0
- package/dist/lib/generic-sorter.d.ts +2 -0
- package/dist/lib/generic-sorter.d.ts.map +1 -0
- package/dist/lib/generic-sorter.js +29 -0
- package/dist/lib/icons.d.ts +5 -0
- package/dist/lib/icons.d.ts.map +1 -0
- package/{lib → dist/lib}/icons.js +5 -8
- package/dist/lib/layout.d.ts +2 -0
- package/dist/lib/layout.d.ts.map +1 -0
- package/dist/lib/layout.js +41 -0
- package/dist/lib/polymer-haunted-render-mixin.d.ts +10 -0
- package/dist/lib/polymer-haunted-render-mixin.d.ts.map +1 -0
- package/dist/lib/polymer-haunted-render-mixin.js +16 -0
- package/dist/lib/render-footer.d.ts +9 -0
- package/dist/lib/render-footer.d.ts.map +1 -0
- package/{lib → dist/lib}/render-footer.js +4 -17
- package/dist/lib/render-header.d.ts +14 -0
- package/dist/lib/render-header.d.ts.map +1 -0
- package/{lib → dist/lib}/render-header.js +6 -27
- package/dist/lib/render-list.d.ts +2 -0
- package/dist/lib/render-list.d.ts.map +1 -0
- package/{lib → dist/lib}/render-list.js +12 -45
- package/dist/lib/save-as-csv-action.d.ts +2 -0
- package/dist/lib/save-as-csv-action.d.ts.map +1 -0
- package/dist/lib/save-as-csv-action.js +26 -0
- package/dist/lib/save-as-xlsx-action.d.ts +3 -0
- package/dist/lib/save-as-xlsx-action.d.ts.map +1 -0
- package/dist/lib/save-as-xlsx-action.js +18 -0
- package/dist/lib/settings/cosmoz-omnitable-settings.d.ts +2 -0
- package/dist/lib/settings/cosmoz-omnitable-settings.d.ts.map +1 -0
- package/{lib → dist/lib}/settings/cosmoz-omnitable-settings.js +27 -69
- package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts +14 -0
- package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts.map +1 -0
- package/dist/lib/settings/cosmoz-omnitable-sort-group.js +55 -0
- package/dist/lib/settings/drivers/context.d.ts +12 -0
- package/dist/lib/settings/drivers/context.d.ts.map +1 -0
- package/dist/lib/settings/drivers/context.js +11 -0
- package/dist/lib/settings/drivers/index.d.ts +4 -0
- package/dist/lib/settings/drivers/index.d.ts.map +1 -0
- package/{lib → dist/lib}/settings/drivers/index.js +1 -0
- package/dist/lib/settings/drivers/local.d.ts +8 -0
- package/dist/lib/settings/drivers/local.d.ts.map +1 -0
- package/dist/lib/settings/drivers/local.js +33 -0
- package/dist/lib/settings/drivers/remote.d.ts +8 -0
- package/dist/lib/settings/drivers/remote.d.ts.map +1 -0
- package/dist/lib/settings/drivers/remote.js +25 -0
- package/dist/lib/settings/index.d.ts +2 -0
- package/dist/lib/settings/index.d.ts.map +1 -0
- package/{lib → dist/lib}/settings/index.js +1 -1
- package/dist/lib/settings/normalize.d.ts +11 -0
- package/dist/lib/settings/normalize.d.ts.map +1 -0
- package/dist/lib/settings/normalize.js +47 -0
- package/dist/lib/settings/style.css.d.ts +4 -0
- package/dist/lib/settings/style.css.d.ts.map +1 -0
- package/{lib → dist/lib}/settings/style.css.js +3 -4
- package/dist/lib/settings/use-saved-settings.d.ts +9 -0
- package/dist/lib/settings/use-saved-settings.d.ts.map +1 -0
- package/dist/lib/settings/use-saved-settings.js +35 -0
- package/dist/lib/settings/use-settings-ui.d.ts +3 -0
- package/dist/lib/settings/use-settings-ui.d.ts.map +1 -0
- package/dist/lib/settings/use-settings-ui.js +78 -0
- package/dist/lib/settings/use-settings.d.ts +23 -0
- package/dist/lib/settings/use-settings.d.ts.map +1 -0
- package/dist/lib/settings/use-settings.js +26 -0
- package/dist/lib/use-canvas-width.d.ts +2 -0
- package/dist/lib/use-canvas-width.d.ts.map +1 -0
- package/dist/lib/use-canvas-width.js +8 -0
- package/dist/lib/use-dom-columns.d.ts +5 -0
- package/dist/lib/use-dom-columns.d.ts.map +1 -0
- package/dist/lib/use-dom-columns.js +127 -0
- package/dist/lib/use-fast-layout.d.ts +13 -0
- package/dist/lib/use-fast-layout.d.ts.map +1 -0
- package/dist/lib/use-fast-layout.js +47 -0
- package/dist/lib/use-footer.d.ts +10 -0
- package/dist/lib/use-footer.d.ts.map +1 -0
- package/dist/lib/use-footer.js +11 -0
- package/dist/lib/use-hash-state.d.ts +4 -0
- package/dist/lib/use-hash-state.d.ts.map +1 -0
- package/dist/lib/use-hash-state.js +32 -0
- package/dist/lib/use-header.d.ts +21 -0
- package/dist/lib/use-header.d.ts.map +1 -0
- package/dist/lib/use-header.js +38 -0
- package/dist/lib/use-layout.d.ts +7 -0
- package/dist/lib/use-layout.d.ts.map +1 -0
- package/dist/lib/use-layout.js +21 -0
- package/dist/lib/use-list.d.ts +31 -0
- package/dist/lib/use-list.d.ts.map +1 -0
- package/dist/lib/use-list.js +198 -0
- package/dist/lib/use-mini.d.ts +10 -0
- package/dist/lib/use-mini.d.ts.map +1 -0
- package/dist/lib/use-mini.js +19 -0
- package/dist/lib/use-omnitable.d.ts +37 -0
- package/dist/lib/use-omnitable.d.ts.map +1 -0
- package/dist/lib/use-omnitable.js +74 -0
- package/dist/lib/use-processed-items.d.ts +17 -0
- package/dist/lib/use-processed-items.d.ts.map +1 -0
- package/dist/lib/use-processed-items.js +151 -0
- package/dist/lib/use-public-interface.d.ts +7 -0
- package/dist/lib/use-public-interface.d.ts.map +1 -0
- package/dist/lib/use-public-interface.js +82 -0
- package/dist/lib/use-resizable-columns.d.ts +7 -0
- package/dist/lib/use-resizable-columns.d.ts.map +1 -0
- package/dist/lib/use-resizable-columns.js +38 -0
- package/dist/lib/use-sort-and-group-options.d.ts +26 -0
- package/dist/lib/use-sort-and-group-options.d.ts.map +1 -0
- package/dist/lib/use-sort-and-group-options.js +36 -0
- package/dist/lib/use-track-size.d.ts +2 -0
- package/dist/lib/use-track-size.d.ts.map +1 -0
- package/dist/lib/use-track-size.js +15 -0
- package/dist/lib/use-tween-array.d.ts +3 -0
- package/dist/lib/use-tween-array.d.ts.map +1 -0
- package/dist/lib/use-tween-array.js +50 -0
- package/dist/lib/utils-amount.d.ts +26 -0
- package/dist/lib/utils-amount.d.ts.map +1 -0
- package/dist/lib/utils-amount.js +99 -0
- package/dist/lib/utils-data.d.ts +8 -0
- package/dist/lib/utils-data.d.ts.map +1 -0
- package/dist/lib/utils-data.js +28 -0
- package/dist/lib/utils-date.d.ts +25 -0
- package/dist/lib/utils-date.d.ts.map +1 -0
- package/dist/lib/utils-date.js +161 -0
- package/dist/lib/utils-datetime.d.ts +16 -0
- package/dist/lib/utils-datetime.d.ts.map +1 -0
- package/dist/lib/utils-datetime.js +52 -0
- package/dist/lib/utils-number.d.ts +19 -0
- package/dist/lib/utils-number.d.ts.map +1 -0
- package/dist/lib/utils-number.js +87 -0
- package/dist/lib/utils-time.d.ts +17 -0
- package/dist/lib/utils-time.d.ts.map +1 -0
- package/dist/lib/utils-time.js +88 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +14 -0
- package/dist/ui-helpers/cosmoz-clear-button.d.ts +2 -0
- package/dist/ui-helpers/cosmoz-clear-button.d.ts.map +1 -0
- package/{ui-helpers → dist/ui-helpers}/cosmoz-clear-button.js +3 -5
- package/package.json +39 -9
- package/cosmoz-omnitable-column-amount.js +0 -162
- package/cosmoz-omnitable-column-autocomplete.js +0 -113
- package/cosmoz-omnitable-column-boolean.js +0 -168
- package/cosmoz-omnitable-column-date.js +0 -133
- package/cosmoz-omnitable-column-datetime.js +0 -145
- package/cosmoz-omnitable-column-list-data.js +0 -141
- package/cosmoz-omnitable-column-list-mixin.js +0 -198
- package/cosmoz-omnitable-column-mixin.js +0 -149
- package/cosmoz-omnitable-column-number.js +0 -157
- package/cosmoz-omnitable-column-time.js +0 -137
- package/cosmoz-omnitable-column.js +0 -99
- package/cosmoz-omnitable-group-row.js +0 -20
- package/cosmoz-omnitable-item-row.js +0 -38
- package/grouped-list/cosmoz-grouped-list-row.js +0 -41
- package/grouped-list/cosmoz-grouped-list.js +0 -13
- package/grouped-list/use-collapsible-items.js +0 -32
- package/grouped-list/use-cosmoz-grouped-list.js +0 -102
- package/grouped-list/use-selected-items.js +0 -140
- package/grouped-list/use-weak-state.js +0 -21
- package/grouped-list/utils.js +0 -89
- package/lib/compute-layout.js +0 -74
- package/lib/cosmoz-omnitable-amount-range-input.js +0 -353
- package/lib/cosmoz-omnitable-date-input-mixin.js +0 -182
- package/lib/cosmoz-omnitable-range-input-mixin.js +0 -451
- package/lib/cosmoz-omnitable-resize-nub.js +0 -41
- package/lib/cosmoz-omnitable-time-range-input.js +0 -154
- package/lib/generic-sorter.js +0 -35
- package/lib/layout.js +0 -61
- package/lib/polymer-haunted-render-mixin.js +0 -19
- package/lib/save-as-csv-action.js +0 -36
- package/lib/save-as-xlsx-action.js +0 -27
- package/lib/settings/cosmoz-omnitable-sort-group.js +0 -74
- package/lib/settings/drivers/context.js +0 -16
- package/lib/settings/drivers/local.js +0 -29
- package/lib/settings/drivers/remote.js +0 -22
- package/lib/settings/normalize.js +0 -76
- package/lib/settings/use-saved-settings.js +0 -43
- package/lib/settings/use-settings-ui.js +0 -125
- package/lib/settings/use-settings.js +0 -53
- package/lib/use-canvas-width.js +0 -12
- package/lib/use-dom-columns.js +0 -166
- package/lib/use-fast-layout.js +0 -73
- package/lib/use-footer.js +0 -16
- package/lib/use-hash-state.js +0 -71
- package/lib/use-header.js +0 -71
- package/lib/use-layout.js +0 -32
- package/lib/use-list.js +0 -263
- package/lib/use-mini.js +0 -30
- package/lib/use-omnitable.js +0 -99
- package/lib/use-processed-items.js +0 -254
- package/lib/use-public-interface.js +0 -107
- package/lib/use-resizable-columns.js +0 -63
- package/lib/use-sort-and-group-options.js +0 -95
- package/lib/use-track-size.js +0 -23
- package/lib/use-tween-array.js +0 -60
- package/lib/utils-amount.js +0 -131
- package/lib/utils-data.js +0 -42
- package/lib/utils-date.js +0 -194
- package/lib/utils-datetime.js +0 -66
- package/lib/utils-number.js +0 -111
- package/lib/utils-time.js +0 -112
- package/lib/utils.js +0 -17
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { layout } from './layout';
|
|
2
|
+
import { findLastIndex } from './utils';
|
|
3
|
+
const _toCss = (layout, config) => {
|
|
4
|
+
const lastVisibleIndex = findLastIndex(layout, (width) => width != null && width > 0), generateCellCSS = (itemName, width) => `.cell[name="${itemName}"], cosmoz-omnitable-skeleton::part(cell-${itemName}){width: ${Math.floor(width)}px;padding: 0 min(3px, ${width / 2}px)}`, hideResizeNub = (itemName) => `cosmoz-omnitable-resize-nub[name="${itemName}"]{display:none}`, hideColumn = (itemName) => `cosmoz-omnitable-resize-nub[name="${itemName}"], .cell[name="${itemName}"]{display:none}`;
|
|
5
|
+
return config
|
|
6
|
+
.map((item, index) => {
|
|
7
|
+
const width = layout[index];
|
|
8
|
+
// Hidden columns
|
|
9
|
+
if (width == null || width === 0) {
|
|
10
|
+
return hideColumn(item.name);
|
|
11
|
+
}
|
|
12
|
+
// All visible columns
|
|
13
|
+
const cellCSS = generateCellCSS(item.name, width);
|
|
14
|
+
// Last visible column, show cell but hide its resize nub
|
|
15
|
+
if (index === lastVisibleIndex) {
|
|
16
|
+
return `${cellCSS}\n${hideResizeNub(item.name)}`;
|
|
17
|
+
}
|
|
18
|
+
// Other visible columns just show the cell
|
|
19
|
+
return cellCSS;
|
|
20
|
+
})
|
|
21
|
+
.join('\n');
|
|
22
|
+
};
|
|
23
|
+
export const computeLayout = (_columnConfigs, canvasWidth, numColumns) => {
|
|
24
|
+
const columnConfigs = _columnConfigs.filter((c) => !c.hidden), totalWidths = columnConfigs.reduce((sum, { width }) => sum + width, 0);
|
|
25
|
+
if (columnConfigs.length > 1 && totalWidths > canvasWidth) {
|
|
26
|
+
// drop a column
|
|
27
|
+
return computeLayout(columnConfigs.slice(1), canvasWidth, numColumns);
|
|
28
|
+
}
|
|
29
|
+
// calculate the index of the last visible column, the one that needs to flex,
|
|
30
|
+
// as the column configs might now be in a different order than displayed
|
|
31
|
+
// due to priority settings
|
|
32
|
+
const lastColumnIndex = columnConfigs.reduce(([max, maxIndex], column, index) => [
|
|
33
|
+
Math.max(max, column.index),
|
|
34
|
+
column.index > max ? index : maxIndex,
|
|
35
|
+
], [-1, -1])[1];
|
|
36
|
+
// force the last visible column to flex
|
|
37
|
+
if (lastColumnIndex !== -1) {
|
|
38
|
+
columnConfigs[lastColumnIndex].flex = 1;
|
|
39
|
+
}
|
|
40
|
+
const widths = layout(columnConfigs, canvasWidth);
|
|
41
|
+
return widths.reduce((sorted, width, i) => {
|
|
42
|
+
sorted[columnConfigs[i].index] = width;
|
|
43
|
+
return sorted;
|
|
44
|
+
}, new Array(numColumns).fill(undefined));
|
|
45
|
+
}, toCss = (layout, config) => layout.length === 0 ? '.cell {display: none;}' : _toCss(layout, config);
|
|
46
|
+
//# sourceMappingURL=compute-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmoz-omnitable-amount-range-input.d.ts","sourceRoot":"","sources":["../../src/lib/cosmoz-omnitable-amount-range-input.js"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { _ } from '@neovici/cosmoz-i18next';
|
|
2
|
+
import { PolymerElement } from '@polymer/polymer';
|
|
3
|
+
import { html } from 'lit-html';
|
|
4
|
+
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
5
|
+
import '@neovici/cosmoz-input';
|
|
6
|
+
import { rangeInputMixin } from './cosmoz-omnitable-range-input-mixin';
|
|
7
|
+
import { polymerHauntedRender } from './polymer-haunted-render-mixin';
|
|
8
|
+
class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerElement)) {
|
|
9
|
+
static get properties() {
|
|
10
|
+
return {
|
|
11
|
+
/**
|
|
12
|
+
* Base Currency used in filters
|
|
13
|
+
*/
|
|
14
|
+
currency: { type: String },
|
|
15
|
+
/**
|
|
16
|
+
* If this is set true then currency property will be the currency with highest occurrence in values
|
|
17
|
+
*/
|
|
18
|
+
autodetect: { type: Boolean, value: false },
|
|
19
|
+
/**
|
|
20
|
+
* Exchange rates of currencies. Example: {"EUR": 1, "USD":0.8169982616, "AUD":0.6529827192, "SEK": 0.1019271438}'
|
|
21
|
+
* Default exchange rate is 1 and it is used for every currency that is present on column values but missing from exchange rates object.
|
|
22
|
+
*/
|
|
23
|
+
rates: { type: Object },
|
|
24
|
+
// trigger filter updates manually
|
|
25
|
+
autoupdate: { type: String, value: false },
|
|
26
|
+
_filterText: {
|
|
27
|
+
type: String,
|
|
28
|
+
computed: '_computeFilterText(filter.*, _formatters)',
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
static get observers() {
|
|
33
|
+
return ['_valuesChanged(autodetect, currency, values)'];
|
|
34
|
+
}
|
|
35
|
+
render() {
|
|
36
|
+
const onOpenedChanged = (event) => {
|
|
37
|
+
this.headerFocused = event.detail.value;
|
|
38
|
+
this._onDropdownOpenedChanged(event);
|
|
39
|
+
};
|
|
40
|
+
return html `
|
|
41
|
+
<style>
|
|
42
|
+
paper-dropdown-menu {
|
|
43
|
+
--iron-icon-width: 0;
|
|
44
|
+
display: block;
|
|
45
|
+
text-align: right;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.dropdown-content h3 {
|
|
49
|
+
font-weight: 500;
|
|
50
|
+
font-size: 13px;
|
|
51
|
+
margin: 0;
|
|
52
|
+
font-family: var(
|
|
53
|
+
--cosmoz-input-font-family,
|
|
54
|
+
var(--paper-font-subhead_-_font-family, 'Inter', sans-serif)
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.dropdown-content {
|
|
59
|
+
padding: 10px 10px 10px 10px;
|
|
60
|
+
min-width: 150px;
|
|
61
|
+
text-align: left;
|
|
62
|
+
background: var(--cosmoz-omnitable-amount-input-background, #ffffff);
|
|
63
|
+
border-radius: 6px;
|
|
64
|
+
backdrop-filter: blur(16px) saturate(180%);
|
|
65
|
+
-webkit-backdrop-filter: blur(16px) saturate(180%);
|
|
66
|
+
box-shadow:
|
|
67
|
+
0 4px 24px 0 rgba(0, 0, 0, 0.18),
|
|
68
|
+
0 1.5px 6px 0 rgba(0, 0, 0, 0.1);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
cosmoz-input[type='number'] {
|
|
72
|
+
background: var(--cosmoz-omnitable-amount-input-background, #ffffff);
|
|
73
|
+
border-radius: 6px;
|
|
74
|
+
border: 1px solid #d1d1d6;
|
|
75
|
+
box-shadow: 0 1px 2px 0 rgba(60, 60, 60, 0.04);
|
|
76
|
+
padding: 2px 8px;
|
|
77
|
+
margin-bottom: 6px;
|
|
78
|
+
min-height: 28px;
|
|
79
|
+
transition:
|
|
80
|
+
border-color 0.2s,
|
|
81
|
+
box-shadow 0.2s;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
cosmoz-input[type='number']:focus-within {
|
|
85
|
+
border-color: var(--cz-accent-color, #007aff);
|
|
86
|
+
box-shadow: 0 0 0 1px rgba(0, 122, 255, 0.15);
|
|
87
|
+
background: var(--cosmoz-omnitable-amount-input-background, #ffffff);
|
|
88
|
+
}
|
|
89
|
+
</style>
|
|
90
|
+
<cosmoz-clear-button
|
|
91
|
+
@click=${() => this.resetFilter()}
|
|
92
|
+
?visible=${this.hasFilter()}
|
|
93
|
+
></cosmoz-clear-button>
|
|
94
|
+
<paper-dropdown-menu
|
|
95
|
+
label=${this.title}
|
|
96
|
+
placeholder=${ifDefined(this._filterText)}
|
|
97
|
+
class="external-values-${this.externalValues}"
|
|
98
|
+
title=${this._tooltip}
|
|
99
|
+
horizontal-align="right"
|
|
100
|
+
?opened=${this.headerFocused}
|
|
101
|
+
@opened-changed=${onOpenedChanged}
|
|
102
|
+
>
|
|
103
|
+
<div class="dropdown-content" slot="dropdown-content">
|
|
104
|
+
<h3 style="margin: 0;">${this.title}</h3>
|
|
105
|
+
<cosmoz-input
|
|
106
|
+
class=${this._fromClasses}
|
|
107
|
+
type="number"
|
|
108
|
+
title=${_('Minimum amount')}
|
|
109
|
+
label=${_('Min amount')}
|
|
110
|
+
.value=${this._filterInput?.min}
|
|
111
|
+
@value-changed=${(event) => {
|
|
112
|
+
this.set('_filterInput.min', event.detail.value);
|
|
113
|
+
}}
|
|
114
|
+
@blur=${(event) => this._onBlur(event)}
|
|
115
|
+
@keydown=${(event) => this._onKeyDown(event)}
|
|
116
|
+
min=${this._toInputStringAmount(this._limit.fromMin)}
|
|
117
|
+
max=${this._toInputStringAmount(this._limit.fromMax)}
|
|
118
|
+
>
|
|
119
|
+
<div slot="suffix" suffix>${this.filter?.min?.currency}</div>
|
|
120
|
+
</cosmoz-input>
|
|
121
|
+
<cosmoz-input
|
|
122
|
+
class=${this._toClasses}
|
|
123
|
+
type="number"
|
|
124
|
+
title=${_('Maximum amount')}
|
|
125
|
+
label=${_('Max amount')}
|
|
126
|
+
.value=${this._filterInput?.max}
|
|
127
|
+
@value-changed=${(event) => {
|
|
128
|
+
this.set('_filterInput.max', event.detail.value);
|
|
129
|
+
}}
|
|
130
|
+
@blur=${(event) => this._onBlur(event)}
|
|
131
|
+
@keydown=${(event) => this._onKeyDown(event)}
|
|
132
|
+
min=${this._toInputStringAmount(this._limit.toMin)}
|
|
133
|
+
max=${this._toInputStringAmount(this._limit.toMax)}
|
|
134
|
+
>
|
|
135
|
+
<div slot="suffix" suffix>${this.filter?.max?.currency}</div>
|
|
136
|
+
</cosmoz-input>
|
|
137
|
+
</div>
|
|
138
|
+
</paper-dropdown-menu>
|
|
139
|
+
`;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Auto-detect currency property: Most frequently occurring currency
|
|
143
|
+
* @param {boolean} autodetect Whether the currency property will be the currency with highest occurrence in values or not.
|
|
144
|
+
* @param {string} currency Base currency used in filters.
|
|
145
|
+
* @param {Array} values Array of amounts
|
|
146
|
+
* @returns {void}
|
|
147
|
+
*/
|
|
148
|
+
_valuesChanged(autodetect, currency, values) {
|
|
149
|
+
if (!Array.isArray(values) || values.length < 1) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (!autodetect && currency) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// array with currencies as keys and occurence as value
|
|
156
|
+
const currencies = values.reduce((p, n) => {
|
|
157
|
+
if (n.currency) {
|
|
158
|
+
const c = n.currency;
|
|
159
|
+
p[c] = (p[c] || 0) + 1;
|
|
160
|
+
}
|
|
161
|
+
return p;
|
|
162
|
+
}, {});
|
|
163
|
+
let key = Object.keys(currencies)[0];
|
|
164
|
+
Object.keys(currencies).reduce((p, n) => {
|
|
165
|
+
const max = Math.max(p, currencies[n]);
|
|
166
|
+
if (max === currencies[n]) {
|
|
167
|
+
key = n;
|
|
168
|
+
}
|
|
169
|
+
return max;
|
|
170
|
+
}, 0);
|
|
171
|
+
this.set('currency', key);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Converts a value to an amount object optionaly limiting it.
|
|
175
|
+
*
|
|
176
|
+
* @param {Object} value The value to convert to number
|
|
177
|
+
* @param {Object} limit The value used to limit the number
|
|
178
|
+
* @param {Function} limitFunc The function used to limit the number (Math.min|Math.max)
|
|
179
|
+
* @returns {Object|void} Value converted to Number or void
|
|
180
|
+
*/
|
|
181
|
+
toAmount(value, limit, limitFunc) {
|
|
182
|
+
if (value == null || value === '') {
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
if (typeof value !== 'object' ||
|
|
186
|
+
value.currency == null ||
|
|
187
|
+
value.currency === '') {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const number = this.toNumber(value.amount);
|
|
191
|
+
if (number == null || Number.isNaN(number)) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
const amount = { currency: value.currency, amount: number };
|
|
195
|
+
if (limitFunc == null || limit == null) {
|
|
196
|
+
return amount;
|
|
197
|
+
}
|
|
198
|
+
const lAmount = this.toAmount(limit);
|
|
199
|
+
if (lAmount == null) {
|
|
200
|
+
return amount;
|
|
201
|
+
}
|
|
202
|
+
// calculate value and limit amounts with rates
|
|
203
|
+
const rates = this.rates || {}, valAmount = amount.amount * (rates[amount.currency] || 1), limAmount = lAmount.amount * (rates[lAmount.currency] || 1), lNumber = this.toNumber(valAmount, limAmount, limitFunc);
|
|
204
|
+
return lNumber === valAmount ? amount : lAmount;
|
|
205
|
+
}
|
|
206
|
+
toValue() {
|
|
207
|
+
return this.toAmount.apply(this, arguments);
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Get the comparable value of an item.
|
|
211
|
+
*
|
|
212
|
+
* @param {Object} item Item to be processed
|
|
213
|
+
* @param {String} valuePath Property path
|
|
214
|
+
* @returns {Number|void} Valid value or void
|
|
215
|
+
*/
|
|
216
|
+
getComparableValue(item, valuePath) {
|
|
217
|
+
const value = super.getComparableValue(item, valuePath);
|
|
218
|
+
if (value == null) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
const amount = this.toNumber(value.amount), rates = this.rates;
|
|
222
|
+
if (rates == null) {
|
|
223
|
+
return amount;
|
|
224
|
+
}
|
|
225
|
+
return amount * (rates[value.currency] || 1);
|
|
226
|
+
}
|
|
227
|
+
getString(item, valuePath = this.valuePath) {
|
|
228
|
+
const value = this.toValue(this.get(valuePath, item));
|
|
229
|
+
if (value === undefined) {
|
|
230
|
+
return '';
|
|
231
|
+
}
|
|
232
|
+
if (value === null) {
|
|
233
|
+
return 'Invalid value';
|
|
234
|
+
}
|
|
235
|
+
return this.renderValue(value);
|
|
236
|
+
}
|
|
237
|
+
getCurrency(item, valuePath) {
|
|
238
|
+
const value = this.get(valuePath, item);
|
|
239
|
+
return value && value.currency;
|
|
240
|
+
}
|
|
241
|
+
getFormatter(currency, locale) {
|
|
242
|
+
const id = locale ? locale : '', key = currency + id || '', formatters = (this._formatters = this._formatters || {});
|
|
243
|
+
if (formatters[key]) {
|
|
244
|
+
return formatters[key];
|
|
245
|
+
}
|
|
246
|
+
formatters[key] = new Intl.NumberFormat(locale || undefined, {
|
|
247
|
+
style: 'currency',
|
|
248
|
+
currency,
|
|
249
|
+
});
|
|
250
|
+
return formatters[key];
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Converts an amount to symbol and value to be rendered.
|
|
254
|
+
*
|
|
255
|
+
* @param {Object} value Amount to be formated
|
|
256
|
+
* @param {Object} _formatters = this._formatters All possible formatters.
|
|
257
|
+
* @returns {String} Formated value or empty string.
|
|
258
|
+
*/
|
|
259
|
+
renderValue(value) {
|
|
260
|
+
const amount = this.toAmount(value);
|
|
261
|
+
if (amount == null) {
|
|
262
|
+
return '';
|
|
263
|
+
}
|
|
264
|
+
return this.getFormatter(amount.currency, this.locale).format(value.amount);
|
|
265
|
+
}
|
|
266
|
+
_amountValueChanged(event) {
|
|
267
|
+
const input = event.target, value = input.value, item = event.model.item, originalValue = this.get(this.valuePath, item), amountValue = Number(value), newValue = { amount: amountValue, currency: originalValue.currency };
|
|
268
|
+
this.set(this.valuePath, newValue, item);
|
|
269
|
+
this._fireItemChangeEvent(item, this.valuePath, originalValue, this.renderValue.bind(this));
|
|
270
|
+
}
|
|
271
|
+
_toInputString(value) {
|
|
272
|
+
const amount = this.toValue(value);
|
|
273
|
+
if (amount == null) {
|
|
274
|
+
return null; //Need null to clear input
|
|
275
|
+
}
|
|
276
|
+
return this.toNumber(amount.amount);
|
|
277
|
+
}
|
|
278
|
+
_toInputStringAmount(value) {
|
|
279
|
+
const rates = this.rates;
|
|
280
|
+
if (rates == null) {
|
|
281
|
+
return this._toInputString(value);
|
|
282
|
+
}
|
|
283
|
+
const amount = this.toValue(value);
|
|
284
|
+
if (amount == null) {
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
const toCurrency = (this.toNumber(amount.amount) * (rates[amount.currency] || 1)) /
|
|
288
|
+
(rates[this.currency] || 1);
|
|
289
|
+
return toCurrency.toFixed(2);
|
|
290
|
+
}
|
|
291
|
+
_fromInputString(value, property) {
|
|
292
|
+
const number = this.toNumber(value);
|
|
293
|
+
if (number == null) {
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
return this.toValue({
|
|
297
|
+
amount: number,
|
|
298
|
+
currency: (property && this.get(['filter', property, 'currency'])) ||
|
|
299
|
+
this.currency,
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
customElements.define('cosmoz-omnitable-amount-range-input', AmountRangeInput);
|
|
304
|
+
//# sourceMappingURL=cosmoz-omnitable-amount-range-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmoz-omnitable-date-input-mixin.d.ts","sourceRoot":"","sources":["../../src/lib/cosmoz-omnitable-date-input-mixin.js"],"names":[],"mappings":"AAUO,qCAHG,KAAK,GACH,KAAK,CA6Kf"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { toLocalISOString } from '@neovici/cosmoz-utils/date';
|
|
2
|
+
import { rangeInputMixin } from './cosmoz-omnitable-range-input-mixin';
|
|
3
|
+
/**
|
|
4
|
+
* @polymer
|
|
5
|
+
* @mixinFunction
|
|
6
|
+
|
|
7
|
+
* @param {class} base The base class
|
|
8
|
+
* @returns {class} The base class with the mixin applied
|
|
9
|
+
*/
|
|
10
|
+
export const dateInputMixin = (base) =>
|
|
11
|
+
/**
|
|
12
|
+
* @polymer
|
|
13
|
+
* @mixinClass
|
|
14
|
+
*/
|
|
15
|
+
class extends rangeInputMixin(base) {
|
|
16
|
+
static get properties() {
|
|
17
|
+
return {
|
|
18
|
+
max: { type: Date, value: null },
|
|
19
|
+
min: { type: Date, value: null },
|
|
20
|
+
_filterText: {
|
|
21
|
+
type: String,
|
|
22
|
+
computed: '_computeFilterText(filter.*, formatter)',
|
|
23
|
+
},
|
|
24
|
+
formatter: { type: Object, computed: '_computeFormatter(locale)' },
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Converts an value to date optionaly limiting it.
|
|
29
|
+
*
|
|
30
|
+
* @param {Date|String} value Value to convert to date
|
|
31
|
+
* @param {Date|String} limit Value used to limit the date
|
|
32
|
+
* @param {Function} limitFunc Function used to limit the date (Math.min|Math.max)
|
|
33
|
+
* @returns {Date|void} Value converted to date optionaly limitated
|
|
34
|
+
*/
|
|
35
|
+
// eslint-disable-next-line max-statements
|
|
36
|
+
toDate(value, limit, limitFunc) {
|
|
37
|
+
if (value == null || value === '') {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// convert value to Date
|
|
41
|
+
let date = value;
|
|
42
|
+
if (!(date instanceof Date)) {
|
|
43
|
+
// if the value is an ISO string, make sure that it has an explicit timezone
|
|
44
|
+
if (typeof value === 'string') {
|
|
45
|
+
date = this.getAbsoluteISOString(date);
|
|
46
|
+
}
|
|
47
|
+
date = new Date(date);
|
|
48
|
+
}
|
|
49
|
+
if (Number.isNaN(date.getTime())) {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
if (limitFunc == null || limit == null) {
|
|
53
|
+
return date;
|
|
54
|
+
}
|
|
55
|
+
const lDate = this.toDate(limit);
|
|
56
|
+
if (lDate == null) {
|
|
57
|
+
return date;
|
|
58
|
+
}
|
|
59
|
+
const comparableDate = this.getComparableValue(date), comparableLDate = this.getComparableValue(lDate), limitedValue = limitFunc(comparableDate, comparableLDate);
|
|
60
|
+
return limitedValue === comparableDate ? date : lDate;
|
|
61
|
+
}
|
|
62
|
+
toValue() {
|
|
63
|
+
return this.toDate.apply(this, arguments);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get comparable number from date
|
|
67
|
+
*
|
|
68
|
+
* @param {Object} item Item to be processed
|
|
69
|
+
* @param {String} valuePath Property path
|
|
70
|
+
* @returns {Number|void} Valid value or void
|
|
71
|
+
*/
|
|
72
|
+
getComparableValue(item, valuePath) {
|
|
73
|
+
const value = super.getComparableValue(item, valuePath);
|
|
74
|
+
if (value == null) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
return this.toNumber(value.getTime());
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get date of item as string
|
|
81
|
+
*
|
|
82
|
+
* @param {Object} item Item to be processed
|
|
83
|
+
* @param {String} valuePath = this.valuePath Property path
|
|
84
|
+
* @param {Object} formatter = this.formatter Property formatter
|
|
85
|
+
* @returns {String} Date rendered as string or 'Invalid Date'
|
|
86
|
+
*/
|
|
87
|
+
getString(item, valuePath = this.valuePath, formatter = this.formatter) {
|
|
88
|
+
const value = this.toValue(this.get(valuePath, item));
|
|
89
|
+
if (value === undefined) {
|
|
90
|
+
return '';
|
|
91
|
+
}
|
|
92
|
+
if (value === null) {
|
|
93
|
+
return 'Invalid Date';
|
|
94
|
+
}
|
|
95
|
+
return this.renderValue(value, formatter);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Computes the local timezone and adds it to a local ISO string
|
|
99
|
+
* @param {String} localISOString an ISO date string, without timezone info
|
|
100
|
+
* @return {String} an ISO date string, with timezone info
|
|
101
|
+
*/
|
|
102
|
+
getAbsoluteISOString(localISOString) {
|
|
103
|
+
// Most browsers use local timezone when no timezone is specified
|
|
104
|
+
// but Safari uses UTC, so we set it implicitly
|
|
105
|
+
// TODO: Consider removing this when/if Safari handles local timezone correctly
|
|
106
|
+
if (localISOString.length === 19) {
|
|
107
|
+
return localISOString + this._getTimezoneString(localISOString);
|
|
108
|
+
}
|
|
109
|
+
return localISOString;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Calculates the local timezone offset and formats it to ISO Timezone string.
|
|
113
|
+
* @param {String} localISOString an ISO date string
|
|
114
|
+
* @return {String} the ISO timezone
|
|
115
|
+
*/
|
|
116
|
+
_getTimezoneString(localISOString) {
|
|
117
|
+
const off = -new Date(localISOString).getTimezoneOffset() / 60;
|
|
118
|
+
return ((off < 0 ? '-' : '+') + ['0', Math.abs(off)].join('').substr(-2) + ':00');
|
|
119
|
+
}
|
|
120
|
+
renderValue(value, formatter = this.formatter) {
|
|
121
|
+
if (formatter == null) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const date = this.toValue(value);
|
|
125
|
+
if (date == null) {
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
return formatter.format(date);
|
|
129
|
+
}
|
|
130
|
+
_computeFormatter(locale) {
|
|
131
|
+
return new Intl.DateTimeFormat(locale || undefined);
|
|
132
|
+
}
|
|
133
|
+
_toInputString(value) {
|
|
134
|
+
const date = this.toValue(value);
|
|
135
|
+
if (date == null) {
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
return this._toLocalISOString(date).slice(0, 10);
|
|
139
|
+
}
|
|
140
|
+
_dateValueChanged(event) {
|
|
141
|
+
const input = event.currentTarget, value = input.value, item = event.model.item, oldValue = this.get(this.valuePath, item), date = this._fromInputString(value);
|
|
142
|
+
this.set(this.valuePath, date, item);
|
|
143
|
+
this._fireItemChangeEvent(item, this.valuePath, oldValue, this.renderValue.bind(this));
|
|
144
|
+
}
|
|
145
|
+
_toLocalISOString(date) {
|
|
146
|
+
return toLocalISOString(date);
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=cosmoz-omnitable-date-input-mixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmoz-omnitable-date-range-input.d.ts","sourceRoot":"","sources":["../../src/lib/cosmoz-omnitable-date-range-input.js"],"names":[],"mappings":""}
|
|
@@ -5,12 +5,9 @@ import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
|
5
5
|
import '@neovici/cosmoz-input';
|
|
6
6
|
import { dateInputMixin } from './cosmoz-omnitable-date-input-mixin';
|
|
7
7
|
import { polymerHauntedRender } from './polymer-haunted-render-mixin';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
) {
|
|
12
|
-
render() {
|
|
13
|
-
return html`
|
|
8
|
+
class DateRangeInput extends dateInputMixin(polymerHauntedRender(PolymerElement)) {
|
|
9
|
+
render() {
|
|
10
|
+
return html `
|
|
14
11
|
<style>
|
|
15
12
|
paper-dropdown-menu {
|
|
16
13
|
--iron-icon-width: 0;
|
|
@@ -71,9 +68,9 @@ class DateRangeInput extends dateInputMixin(
|
|
|
71
68
|
horizontal-align="right"
|
|
72
69
|
?opened=${this.headerFocused}
|
|
73
70
|
@opened-changed=${(event) => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
71
|
+
// TODO: check ots integration
|
|
72
|
+
this.headerFocused = event.detail.value;
|
|
73
|
+
}}
|
|
77
74
|
>
|
|
78
75
|
<div class="dropdown-content" slot="dropdown-content">
|
|
79
76
|
<h3 style="margin: 0;">${this.title}</h3>
|
|
@@ -83,8 +80,7 @@ class DateRangeInput extends dateInputMixin(
|
|
|
83
80
|
min=${this._toInputString(this._limit.fromMin)}
|
|
84
81
|
max=${this._toInputString(this._limit.fromMax)}
|
|
85
82
|
.value=${this._filterInput?.min}
|
|
86
|
-
@value-changed=${(event) =>
|
|
87
|
-
this.set('_filterInput.min', event.detail.value)}
|
|
83
|
+
@value-changed=${(event) => this.set('_filterInput.min', event.detail.value)}
|
|
88
84
|
></cosmoz-input>
|
|
89
85
|
<cosmoz-input
|
|
90
86
|
type="date"
|
|
@@ -92,39 +88,34 @@ class DateRangeInput extends dateInputMixin(
|
|
|
92
88
|
min=${this._toInputString(this._limit.toMin)}
|
|
93
89
|
max=${this._toInputString(this._limit.toMax)}
|
|
94
90
|
.value=${this._filterInput?.max}
|
|
95
|
-
@value-changed=${(event) =>
|
|
96
|
-
this.set('_filterInput.max', event.detail.value)}
|
|
91
|
+
@value-changed=${(event) => this.set('_filterInput.max', event.detail.value)}
|
|
97
92
|
></cosmoz-input>
|
|
98
93
|
</div>
|
|
99
94
|
</paper-dropdown-menu>
|
|
100
95
|
`;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
super._filterInputChanged(change, autoupdate);
|
|
127
|
-
}
|
|
96
|
+
}
|
|
97
|
+
_fromInputString(value, property) {
|
|
98
|
+
const date = this.toDate(value);
|
|
99
|
+
if (date == null) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (property === 'min') {
|
|
103
|
+
date.setHours(0, 0, 0, 0);
|
|
104
|
+
}
|
|
105
|
+
if (property === 'max') {
|
|
106
|
+
date.setHours(23, 59, 59);
|
|
107
|
+
}
|
|
108
|
+
return date;
|
|
109
|
+
}
|
|
110
|
+
_filterInputChanged(change, autoupdate) {
|
|
111
|
+
const path = change.path.split('.')[1], value = path && change.value;
|
|
112
|
+
// don't trigger change when date input begins with 0; Year (starting from 0000) was limited before the needed value was typed.
|
|
113
|
+
if (value && value.match(/^0+/u)) {
|
|
114
|
+
this._limitInputDebouncer.cancel();
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
super._filterInputChanged(change, autoupdate);
|
|
118
|
+
}
|
|
128
119
|
}
|
|
129
|
-
|
|
130
120
|
customElements.define('cosmoz-omnitable-date-range-input', DateRangeInput);
|
|
121
|
+
//# sourceMappingURL=cosmoz-omnitable-date-range-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cosmoz-omnitable-datetime-range-input.d.ts","sourceRoot":"","sources":["../../src/lib/cosmoz-omnitable-datetime-range-input.js"],"names":[],"mappings":""}
|