@neovici/cosmoz-omnitable 12.26.4 → 12.28.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/cosmoz-omnitable-column-amount.js +46 -38
- package/cosmoz-omnitable-column-autocomplete.js +12 -11
- package/cosmoz-omnitable-column-date.js +3 -3
- package/cosmoz-omnitable-column-datetime.js +1 -1
- package/cosmoz-omnitable-column-list.js +10 -9
- package/cosmoz-omnitable-column-number.js +41 -25
- package/cosmoz-omnitable-column-time.js +33 -23
- package/cosmoz-omnitable-column.js +53 -41
- package/cosmoz-omnitable-styles.js +3 -12
- package/lib/cosmoz-omnitable-amount-range-input.js +82 -53
- package/lib/cosmoz-omnitable-date-range-input.js +44 -28
- package/lib/cosmoz-omnitable-datetime-range-input.js +46 -27
- package/lib/cosmoz-omnitable-number-range-input.js +51 -63
- package/lib/cosmoz-omnitable-range-input-mixin.js +2 -2
- package/lib/cosmoz-omnitable-time-range-input.js +5 -4
- package/package.json +6 -8
- package/ui-helpers/cosmoz-clear-button.js +66 -59
|
@@ -2,10 +2,13 @@ import { _ } from '@neovici/cosmoz-i18next';
|
|
|
2
2
|
import { PolymerElement } from '@polymer/polymer';
|
|
3
3
|
import { html } from 'lit-html';
|
|
4
4
|
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
5
|
+
import '@neovici/cosmoz-input';
|
|
5
6
|
import { rangeInputMixin } from './cosmoz-omnitable-range-input-mixin';
|
|
6
7
|
import { polymerHauntedRender } from './polymer-haunted-render-mixin';
|
|
7
8
|
|
|
8
|
-
class AmountRangeInput extends rangeInputMixin(
|
|
9
|
+
class AmountRangeInput extends rangeInputMixin(
|
|
10
|
+
polymerHauntedRender(PolymerElement),
|
|
11
|
+
) {
|
|
9
12
|
static get properties() {
|
|
10
13
|
return {
|
|
11
14
|
/**
|
|
@@ -25,19 +28,20 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
25
28
|
rates: { type: Object },
|
|
26
29
|
// trigger filter updates manually
|
|
27
30
|
autoupdate: { type: String, value: false },
|
|
28
|
-
_filterText: {
|
|
31
|
+
_filterText: {
|
|
32
|
+
type: String,
|
|
33
|
+
computed: '_computeFilterText(filter.*, _formatters)',
|
|
34
|
+
},
|
|
29
35
|
};
|
|
30
36
|
}
|
|
31
37
|
|
|
32
38
|
static get observers() {
|
|
33
|
-
return [
|
|
34
|
-
'_valuesChanged(autodetect, currency, values)'
|
|
35
|
-
];
|
|
39
|
+
return ['_valuesChanged(autodetect, currency, values)'];
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
// eslint-disable-next-line max-lines-per-function
|
|
39
43
|
render() {
|
|
40
|
-
const onOpenedChanged = event => {
|
|
44
|
+
const onOpenedChanged = (event) => {
|
|
41
45
|
this.headerFocused = event.detail.value;
|
|
42
46
|
this._onDropdownOpenedChanged(event);
|
|
43
47
|
};
|
|
@@ -49,46 +53,59 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
49
53
|
display: block;
|
|
50
54
|
}
|
|
51
55
|
</style>
|
|
52
|
-
<cosmoz-clear-button
|
|
56
|
+
<cosmoz-clear-button
|
|
57
|
+
@click=${() => this.resetFilter()}
|
|
58
|
+
?visible=${this.hasFilter()}
|
|
59
|
+
></cosmoz-clear-button>
|
|
53
60
|
<paper-dropdown-menu
|
|
54
|
-
label=${
|
|
55
|
-
placeholder=${
|
|
56
|
-
class="external-values-${
|
|
57
|
-
title=${
|
|
61
|
+
label=${this.title}
|
|
62
|
+
placeholder=${ifDefined(this._filterText)}
|
|
63
|
+
class="external-values-${this.externalValues}"
|
|
64
|
+
title=${this._tooltip}
|
|
58
65
|
horizontal-align="right"
|
|
59
|
-
?opened=${
|
|
60
|
-
@opened-changed=${
|
|
66
|
+
?opened=${this.headerFocused}
|
|
67
|
+
@opened-changed=${onOpenedChanged}
|
|
61
68
|
>
|
|
62
|
-
<div
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
69
|
+
<div
|
|
70
|
+
class="dropdown-content"
|
|
71
|
+
slot="dropdown-content"
|
|
72
|
+
style="padding: 15px; min-width: 150px;"
|
|
73
|
+
>
|
|
74
|
+
<h3 style="margin: 0;">${this.title}</h3>
|
|
75
|
+
<cosmoz-input
|
|
76
|
+
class=${this._fromClasses}
|
|
66
77
|
type="number"
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
.value=${
|
|
70
|
-
@value-changed=${
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
@blur=${
|
|
74
|
-
@keydown=${
|
|
75
|
-
min=${
|
|
76
|
-
max=${
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
78
|
+
title=${_('Minimum amount')}
|
|
79
|
+
label=${_('Min amount')}
|
|
80
|
+
.value=${this._filterInput?.min}
|
|
81
|
+
@value-changed=${(event) => {
|
|
82
|
+
this.set('_filterInput.min', event.detail.value);
|
|
83
|
+
}}
|
|
84
|
+
@blur=${(event) => this._onBlur(event)}
|
|
85
|
+
@keydown=${(event) => this._onKeyDown(event)}
|
|
86
|
+
min=${this._toInputStringAmount(this._limit.fromMin)}
|
|
87
|
+
max=${this._toInputStringAmount(this._limit.fromMax)}
|
|
88
|
+
><div slot="suffix" suffix>
|
|
89
|
+
${this.filter?.min?.currency}
|
|
90
|
+
</div></cosmoz-input
|
|
91
|
+
>
|
|
92
|
+
<cosmoz-input
|
|
93
|
+
class=${this._toClasses}
|
|
80
94
|
type="number"
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
.value=${
|
|
84
|
-
@value-changed=${
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
@blur=${
|
|
88
|
-
@keydown=${
|
|
89
|
-
min=${
|
|
90
|
-
max=${
|
|
91
|
-
|
|
95
|
+
title=${_('Maximum amount')}
|
|
96
|
+
label=${_('Max amount')}
|
|
97
|
+
.value=${this._filterInput?.max}
|
|
98
|
+
@value-changed=${(event) => {
|
|
99
|
+
this.set('_filterInput.max', event.detail.value);
|
|
100
|
+
}}
|
|
101
|
+
@blur=${(event) => this._onBlur(event)}
|
|
102
|
+
@keydown=${(event) => this._onKeyDown(event)}
|
|
103
|
+
min=${this._toInputStringAmount(this._limit.toMin)}
|
|
104
|
+
max=${this._toInputStringAmount(this._limit.toMax)}
|
|
105
|
+
><div slot="suffix" suffix>
|
|
106
|
+
${this.filter?.max?.currency}
|
|
107
|
+
</div></cosmoz-input
|
|
108
|
+
>
|
|
92
109
|
</div>
|
|
93
110
|
</paper-dropdown-menu>
|
|
94
111
|
`;
|
|
@@ -136,12 +153,17 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
136
153
|
* @param {Function} limitFunc The function used to limit the number (Math.min|Math.max)
|
|
137
154
|
* @returns {Object|void} Value converted to Number or void
|
|
138
155
|
*/
|
|
139
|
-
toAmount(value, limit, limitFunc) {
|
|
156
|
+
toAmount(value, limit, limitFunc) {
|
|
157
|
+
// eslint-disable-line max-statements
|
|
140
158
|
if (value == null || value === '') {
|
|
141
159
|
return;
|
|
142
160
|
}
|
|
143
161
|
|
|
144
|
-
if (
|
|
162
|
+
if (
|
|
163
|
+
typeof value !== 'object' ||
|
|
164
|
+
value.currency == null ||
|
|
165
|
+
value.currency === ''
|
|
166
|
+
) {
|
|
145
167
|
return null;
|
|
146
168
|
}
|
|
147
169
|
|
|
@@ -151,7 +173,7 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
151
173
|
}
|
|
152
174
|
const amount = {
|
|
153
175
|
currency: value.currency,
|
|
154
|
-
amount: number
|
|
176
|
+
amount: number,
|
|
155
177
|
};
|
|
156
178
|
|
|
157
179
|
if (limitFunc == null || limit == null) {
|
|
@@ -215,14 +237,14 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
215
237
|
getFormatter(currency, locale) {
|
|
216
238
|
const id = locale ? locale : '',
|
|
217
239
|
key = currency + id || '',
|
|
218
|
-
formatters = this._formatters = this._formatters || {};
|
|
240
|
+
formatters = (this._formatters = this._formatters || {});
|
|
219
241
|
if (formatters[key]) {
|
|
220
242
|
return formatters[key];
|
|
221
243
|
}
|
|
222
244
|
|
|
223
245
|
formatters[key] = new Intl.NumberFormat(locale || undefined, {
|
|
224
246
|
style: 'currency',
|
|
225
|
-
currency
|
|
247
|
+
currency,
|
|
226
248
|
});
|
|
227
249
|
|
|
228
250
|
return formatters[key];
|
|
@@ -239,8 +261,7 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
239
261
|
if (amount == null) {
|
|
240
262
|
return '';
|
|
241
263
|
}
|
|
242
|
-
return this.getFormatter(amount.currency, this.locale)
|
|
243
|
-
.format(value.amount);
|
|
264
|
+
return this.getFormatter(amount.currency, this.locale).format(value.amount);
|
|
244
265
|
}
|
|
245
266
|
|
|
246
267
|
_amountValueChanged(event) {
|
|
@@ -251,11 +272,16 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
251
272
|
amountValue = Number(value),
|
|
252
273
|
newValue = {
|
|
253
274
|
amount: amountValue,
|
|
254
|
-
currency: originalValue.currency
|
|
275
|
+
currency: originalValue.currency,
|
|
255
276
|
};
|
|
256
277
|
|
|
257
278
|
this.set(this.valuePath, newValue, item);
|
|
258
|
-
this._fireItemChangeEvent(
|
|
279
|
+
this._fireItemChangeEvent(
|
|
280
|
+
item,
|
|
281
|
+
this.valuePath,
|
|
282
|
+
originalValue,
|
|
283
|
+
this.renderValue.bind(this),
|
|
284
|
+
);
|
|
259
285
|
}
|
|
260
286
|
|
|
261
287
|
_toInputString(value) {
|
|
@@ -275,7 +301,9 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
275
301
|
if (amount == null) {
|
|
276
302
|
return null;
|
|
277
303
|
}
|
|
278
|
-
const toCurrency =
|
|
304
|
+
const toCurrency =
|
|
305
|
+
(this.toNumber(amount.amount) * (rates[amount.currency] || 1)) /
|
|
306
|
+
(rates[this.currency] || 1);
|
|
279
307
|
return toCurrency.toFixed(2);
|
|
280
308
|
}
|
|
281
309
|
|
|
@@ -286,10 +314,11 @@ class AmountRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
286
314
|
}
|
|
287
315
|
return this.toValue({
|
|
288
316
|
amount: number,
|
|
289
|
-
currency:
|
|
317
|
+
currency:
|
|
318
|
+
(property && this.get(['filter', property, 'currency'])) ||
|
|
319
|
+
this.currency,
|
|
290
320
|
});
|
|
291
321
|
}
|
|
292
322
|
}
|
|
293
323
|
|
|
294
|
-
|
|
295
324
|
customElements.define('cosmoz-omnitable-amount-range-input', AmountRangeInput);
|
|
@@ -2,10 +2,13 @@ import { _ } from '@neovici/cosmoz-i18next';
|
|
|
2
2
|
import { PolymerElement } from '@polymer/polymer';
|
|
3
3
|
import { html } from 'lit-html';
|
|
4
4
|
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
5
|
+
import '@neovici/cosmoz-input';
|
|
5
6
|
import { dateInputMixin } from './cosmoz-omnitable-date-input-mixin';
|
|
6
7
|
import { polymerHauntedRender } from './polymer-haunted-render-mixin';
|
|
7
8
|
|
|
8
|
-
class DateRangeInput extends dateInputMixin(
|
|
9
|
+
class DateRangeInput extends dateInputMixin(
|
|
10
|
+
polymerHauntedRender(PolymerElement),
|
|
11
|
+
) {
|
|
9
12
|
// eslint-disable-next-line max-lines-per-function
|
|
10
13
|
render() {
|
|
11
14
|
return html`
|
|
@@ -14,37 +17,51 @@ class DateRangeInput extends dateInputMixin(polymerHauntedRender(PolymerElement)
|
|
|
14
17
|
--iron-icon-width: 0;
|
|
15
18
|
display: block;
|
|
16
19
|
}
|
|
20
|
+
cosmoz-input {
|
|
21
|
+
--paper-font-subhead_-_font-size: 16px;
|
|
22
|
+
margin-bottom: 6px;
|
|
23
|
+
}
|
|
17
24
|
</style>
|
|
18
|
-
<cosmoz-clear-button
|
|
25
|
+
<cosmoz-clear-button
|
|
26
|
+
@click=${() => this.resetFilter()}
|
|
27
|
+
?visible=${this.hasFilter()}
|
|
28
|
+
></cosmoz-clear-button>
|
|
19
29
|
<paper-dropdown-menu
|
|
20
|
-
label=${
|
|
21
|
-
placeholder=${
|
|
22
|
-
class="external-values-${
|
|
23
|
-
title=${
|
|
30
|
+
label=${this.title}
|
|
31
|
+
placeholder=${ifDefined(this._filterText)}
|
|
32
|
+
class="external-values-${this.externalValues}"
|
|
33
|
+
title=${this._tooltip}
|
|
24
34
|
horizontal-align="right"
|
|
25
|
-
?opened=${
|
|
26
|
-
@opened-changed=${
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
?opened=${this.headerFocused}
|
|
36
|
+
@opened-changed=${(event) => {
|
|
37
|
+
// TODO: check ots integration
|
|
38
|
+
this.headerFocused = event.detail.value;
|
|
39
|
+
}}
|
|
40
|
+
>
|
|
41
|
+
<div
|
|
42
|
+
class="dropdown-content"
|
|
43
|
+
slot="dropdown-content"
|
|
44
|
+
style="padding: 15px; min-width: 100px;"
|
|
45
|
+
>
|
|
46
|
+
<h3 style="margin: 0;">${this.title}</h3>
|
|
47
|
+
<cosmoz-input
|
|
33
48
|
type="date"
|
|
34
|
-
label=${
|
|
35
|
-
min=${
|
|
36
|
-
max=${
|
|
37
|
-
.value=${
|
|
38
|
-
@value-changed=${
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
label=${_('From date')}
|
|
50
|
+
min=${this._toInputString(this._limit.fromMin)}
|
|
51
|
+
max=${this._toInputString(this._limit.fromMax)}
|
|
52
|
+
.value=${this._filterInput?.min}
|
|
53
|
+
@value-changed=${(event) =>
|
|
54
|
+
this.set('_filterInput.min', event.detail.value)}
|
|
55
|
+
></cosmoz-input>
|
|
56
|
+
<cosmoz-input
|
|
41
57
|
type="date"
|
|
42
|
-
label=${
|
|
43
|
-
min=${
|
|
44
|
-
max=${
|
|
45
|
-
.value=${
|
|
46
|
-
@value-changed=${
|
|
47
|
-
|
|
58
|
+
label=${_('Until date')}
|
|
59
|
+
min=${this._toInputString(this._limit.toMin)}
|
|
60
|
+
max=${this._toInputString(this._limit.toMax)}
|
|
61
|
+
.value=${this._filterInput?.max}
|
|
62
|
+
@value-changed=${(event) =>
|
|
63
|
+
this.set('_filterInput.max', event.detail.value)}
|
|
64
|
+
></cosmoz-input>
|
|
48
65
|
</div>
|
|
49
66
|
</paper-dropdown-menu>
|
|
50
67
|
`;
|
|
@@ -77,5 +94,4 @@ class DateRangeInput extends dateInputMixin(polymerHauntedRender(PolymerElement)
|
|
|
77
94
|
}
|
|
78
95
|
}
|
|
79
96
|
|
|
80
|
-
|
|
81
97
|
customElements.define('cosmoz-omnitable-date-range-input', DateRangeInput);
|
|
@@ -5,7 +5,9 @@ import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
|
5
5
|
import { dateInputMixin } from './cosmoz-omnitable-date-input-mixin';
|
|
6
6
|
import { polymerHauntedRender } from './polymer-haunted-render-mixin';
|
|
7
7
|
|
|
8
|
-
class DatetimeRangeInput extends dateInputMixin(
|
|
8
|
+
class DatetimeRangeInput extends dateInputMixin(
|
|
9
|
+
polymerHauntedRender(PolymerElement),
|
|
10
|
+
) {
|
|
9
11
|
// eslint-disable-next-line max-lines-per-function
|
|
10
12
|
render() {
|
|
11
13
|
return html`
|
|
@@ -14,36 +16,51 @@ class DatetimeRangeInput extends dateInputMixin(polymerHauntedRender(PolymerElem
|
|
|
14
16
|
--iron-icon-width: 0;
|
|
15
17
|
display: block;
|
|
16
18
|
}
|
|
19
|
+
cosmoz-input {
|
|
20
|
+
--paper-font-subhead_-_font-size: 16px;
|
|
21
|
+
margin-bottom: 6px;
|
|
22
|
+
}
|
|
17
23
|
</style>
|
|
18
24
|
|
|
19
|
-
<cosmoz-clear-button
|
|
25
|
+
<cosmoz-clear-button
|
|
26
|
+
@click=${() => this.resetFilter()}
|
|
27
|
+
?visible=${this.hasFilter()}
|
|
28
|
+
></cosmoz-clear-button>
|
|
20
29
|
<paper-dropdown-menu
|
|
21
|
-
label=${
|
|
22
|
-
placeholder=${
|
|
23
|
-
class="external-values-${
|
|
24
|
-
title=${
|
|
30
|
+
label=${this.title}
|
|
31
|
+
placeholder=${ifDefined(this._filterText)}
|
|
32
|
+
class="external-values-${this.externalValues}"
|
|
33
|
+
title=${this._tooltip}
|
|
25
34
|
horizontal-align="right"
|
|
26
|
-
?opened=${
|
|
27
|
-
@opened-changed=${
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
?opened=${this.headerFocused}
|
|
36
|
+
@opened-changed=${(event) =>
|
|
37
|
+
this.set('headerFocused', event.detail.value)}
|
|
38
|
+
>
|
|
39
|
+
<div
|
|
40
|
+
class="dropdown-content"
|
|
41
|
+
slot="dropdown-content"
|
|
42
|
+
style="padding: 15px; min-width: 100px;"
|
|
43
|
+
>
|
|
44
|
+
<h3 style="margin: 0;">${this.title}</h3>
|
|
30
45
|
<cosmoz-datetime-input
|
|
31
|
-
date-label=${
|
|
32
|
-
time-label=${
|
|
33
|
-
min=${
|
|
34
|
-
max=${
|
|
35
|
-
step=${
|
|
36
|
-
.value=${
|
|
37
|
-
@value-changed=${
|
|
46
|
+
date-label=${_('From date')}
|
|
47
|
+
time-label=${_('From time')}
|
|
48
|
+
min=${this._toInputString(this._limit.fromMin)}
|
|
49
|
+
max=${this._toInputString(this._limit.fromMax)}
|
|
50
|
+
step=${this.filterStep}
|
|
51
|
+
.value=${this._filterInput?.min}
|
|
52
|
+
@value-changed=${(event) =>
|
|
53
|
+
this.set('_filterInput.min', event.detail.value)}
|
|
38
54
|
></cosmoz-datetime-input>
|
|
39
55
|
<cosmoz-datetime-input
|
|
40
|
-
date-label=${
|
|
41
|
-
time-label=${
|
|
42
|
-
min=${
|
|
43
|
-
max=${
|
|
44
|
-
step=${
|
|
45
|
-
.value=${
|
|
46
|
-
@value-changed=${
|
|
56
|
+
date-label=${_('To date')}
|
|
57
|
+
time-label=${_('To time')}
|
|
58
|
+
min=${this._toInputString(this._limit.toMin)}
|
|
59
|
+
max=${this._toInputString(this._limit.toMax)}
|
|
60
|
+
step=${this.filterStep}
|
|
61
|
+
.value=${this._filterInput?.max}
|
|
62
|
+
@value-changed=${(event) =>
|
|
63
|
+
this.set('_filterInput.max', event.detail.value)}
|
|
47
64
|
></cosmoz-datetime-input>
|
|
48
65
|
</div>
|
|
49
66
|
</paper-dropdown-menu>
|
|
@@ -65,11 +82,13 @@ class DatetimeRangeInput extends dateInputMixin(polymerHauntedRender(PolymerElem
|
|
|
65
82
|
month: 'numeric',
|
|
66
83
|
day: 'numeric',
|
|
67
84
|
hour: 'numeric',
|
|
68
|
-
minute: 'numeric'
|
|
85
|
+
minute: 'numeric',
|
|
69
86
|
};
|
|
70
87
|
return new Intl.DateTimeFormat(locale || undefined, timeFormatOption);
|
|
71
88
|
}
|
|
72
89
|
}
|
|
73
90
|
|
|
74
|
-
|
|
75
|
-
|
|
91
|
+
customElements.define(
|
|
92
|
+
'cosmoz-omnitable-datetime-range-input',
|
|
93
|
+
DatetimeRangeInput,
|
|
94
|
+
);
|
|
@@ -2,33 +2,37 @@ import { _ } from '@neovici/cosmoz-i18next';
|
|
|
2
2
|
import { PolymerElement } from '@polymer/polymer';
|
|
3
3
|
import { html } from 'lit-html';
|
|
4
4
|
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
5
|
+
import '@neovici/cosmoz-input';
|
|
5
6
|
import { rangeInputMixin } from './cosmoz-omnitable-range-input-mixin';
|
|
6
7
|
import { polymerHauntedRender } from './polymer-haunted-render-mixin';
|
|
7
8
|
|
|
8
|
-
class NumberRangeInput extends rangeInputMixin(
|
|
9
|
+
class NumberRangeInput extends rangeInputMixin(
|
|
10
|
+
polymerHauntedRender(PolymerElement),
|
|
11
|
+
) {
|
|
9
12
|
static get properties() {
|
|
10
13
|
return {
|
|
11
14
|
maximumFractionDigits: { type: Number, value: null },
|
|
12
15
|
minimumFractionDigits: { type: Number, value: null }, // browser default 0 for numbers, currency-specific or 2 for currency
|
|
13
16
|
formatter: {
|
|
14
17
|
type: Object,
|
|
15
|
-
computed:
|
|
18
|
+
computed:
|
|
19
|
+
'_computeFormatter(locale, minimumFractionDigits, maximumFractionDigits)',
|
|
16
20
|
},
|
|
17
21
|
// trigger filter updates manually
|
|
18
22
|
autoupdate: {
|
|
19
23
|
type: String,
|
|
20
|
-
value: false
|
|
24
|
+
value: false,
|
|
21
25
|
},
|
|
22
26
|
_filterText: {
|
|
23
27
|
type: String,
|
|
24
|
-
computed: '_computeFilterText(filter.*, formatter)'
|
|
25
|
-
}
|
|
28
|
+
computed: '_computeFilterText(filter.*, formatter)',
|
|
29
|
+
},
|
|
26
30
|
};
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
// eslint-disable-next-line max-lines-per-function
|
|
30
34
|
render() {
|
|
31
|
-
const onOpenedChanged = event => {
|
|
35
|
+
const onOpenedChanged = (event) => {
|
|
32
36
|
this.headerFocused = event.detail.value;
|
|
33
37
|
this._onDropdownOpenedChanged(event);
|
|
34
38
|
};
|
|
@@ -41,46 +45,51 @@ class NumberRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
41
45
|
}
|
|
42
46
|
</style>
|
|
43
47
|
|
|
44
|
-
<cosmoz-clear-button
|
|
48
|
+
<cosmoz-clear-button
|
|
49
|
+
@click=${() => this.resetFilter()}
|
|
50
|
+
?visible=${this.hasFilter()}
|
|
51
|
+
></cosmoz-clear-button>
|
|
45
52
|
<paper-dropdown-menu
|
|
46
|
-
label=${
|
|
47
|
-
placeholder=${
|
|
48
|
-
class="external-values-${
|
|
49
|
-
title=${
|
|
53
|
+
label=${this.title}
|
|
54
|
+
placeholder=${ifDefined(this._filterText)}
|
|
55
|
+
class="external-values-${this.externalValues}"
|
|
56
|
+
title=${this._tooltip}
|
|
50
57
|
horizontal-align="right"
|
|
51
|
-
?opened=${
|
|
52
|
-
@opened-changed=${
|
|
58
|
+
?opened=${this.headerFocused}
|
|
59
|
+
@opened-changed=${onOpenedChanged}
|
|
53
60
|
>
|
|
54
|
-
<div
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
<div
|
|
62
|
+
class="dropdown-content"
|
|
63
|
+
slot="dropdown-content"
|
|
64
|
+
style="padding: 15px; min-width: 100px;"
|
|
65
|
+
>
|
|
66
|
+
<h3 style="margin: 0;">${this.title}</h3>
|
|
67
|
+
<cosmoz-input
|
|
68
|
+
class=${this._fromClasses}
|
|
58
69
|
type="number"
|
|
59
|
-
label=${
|
|
60
|
-
.value=${
|
|
61
|
-
@value-changed=${
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
@
|
|
65
|
-
@
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
class=${ this._toClasses }
|
|
70
|
+
label=${_('From')}
|
|
71
|
+
.value=${this._filterInput?.min}
|
|
72
|
+
@value-changed=${(event) => {
|
|
73
|
+
this.set('_filterInput.min', event.detail.value);
|
|
74
|
+
}}
|
|
75
|
+
@blur=${(event) => this._onBlur(event)}
|
|
76
|
+
@keydown=${(event) => this._onKeyDown(event)}
|
|
77
|
+
min=${this._toInputString(this._limit.fromMin)}
|
|
78
|
+
max=${this._toInputString(this._limit.fromMax)}
|
|
79
|
+
></cosmoz-input>
|
|
80
|
+
<cosmoz-input
|
|
81
|
+
class=${this._toClasses}
|
|
72
82
|
type="number"
|
|
73
|
-
label=${
|
|
74
|
-
.value=${
|
|
75
|
-
@value-changed=${
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
@
|
|
79
|
-
@
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
></paper-input>
|
|
83
|
+
label=${_('To')}
|
|
84
|
+
.value=${this._filterInput?.max}
|
|
85
|
+
@value-changed=${(event) => {
|
|
86
|
+
this.set('_filterInput.max', event.detail.value);
|
|
87
|
+
}}
|
|
88
|
+
@blur=${(event) => this._onBlur(event)}
|
|
89
|
+
@keydown=${(event) => this._onKeyDown(event)}
|
|
90
|
+
min=${this._toInputString(this._limit.toMin)}
|
|
91
|
+
max=${this._toInputString(this._limit.toMax)}
|
|
92
|
+
></cosmoz-input>
|
|
84
93
|
</div>
|
|
85
94
|
</paper-dropdown-menu>
|
|
86
95
|
`;
|
|
@@ -88,7 +97,7 @@ class NumberRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
88
97
|
|
|
89
98
|
_computeFormatter(locale, minimumFractionDigits, maximumFractionDigits) {
|
|
90
99
|
const options = {
|
|
91
|
-
localeMatcher: 'best fit' // chrome expects this when using custom options
|
|
100
|
+
localeMatcher: 'best fit', // chrome expects this when using custom options
|
|
92
101
|
};
|
|
93
102
|
if (minimumFractionDigits !== null) {
|
|
94
103
|
options.minimumFractionDigits = minimumFractionDigits;
|
|
@@ -99,26 +108,6 @@ class NumberRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
99
108
|
return new Intl.NumberFormat(locale || undefined, options);
|
|
100
109
|
}
|
|
101
110
|
|
|
102
|
-
/**
|
|
103
|
-
* Check if label should float based on validity
|
|
104
|
-
*
|
|
105
|
-
* Number inputs can have allowed characters that aren't numbers (-,e) and won't
|
|
106
|
-
* trigger a value change and thus not float the label.
|
|
107
|
-
* However, the validity will report badInput so we can trigger a label float by
|
|
108
|
-
* setting it to something truthy but still not visible.
|
|
109
|
-
* Fixed in paper-input 3.x
|
|
110
|
-
*
|
|
111
|
-
* @param {Event} event KeyboardEvent
|
|
112
|
-
* @returns {void}
|
|
113
|
-
*/
|
|
114
|
-
onBadInputFloatLabel(event) {
|
|
115
|
-
const paperInput = event.currentTarget;
|
|
116
|
-
if (paperInput == null || paperInput.tagName !== 'PAPER-INPUT') {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
paperInput.placeholder = paperInput.$.nativeInput.validity.badInput ? ' ' : '';
|
|
120
|
-
}
|
|
121
|
-
|
|
122
111
|
/**
|
|
123
112
|
* Get the comparable value of an item.
|
|
124
113
|
*
|
|
@@ -155,5 +144,4 @@ class NumberRangeInput extends rangeInputMixin(polymerHauntedRender(PolymerEleme
|
|
|
155
144
|
}
|
|
156
145
|
}
|
|
157
146
|
|
|
158
|
-
|
|
159
147
|
customElements.define('cosmoz-omnitable-number-range-input', NumberRangeInput);
|
|
@@ -308,7 +308,7 @@ export const rangeInputMixin = base => // eslint-disable-line max-lines-per-func
|
|
|
308
308
|
|
|
309
309
|
_onKeyDown(event) {
|
|
310
310
|
const input = event.currentTarget,
|
|
311
|
-
inputs = Array.from(input.parentElement.querySelectorAll('
|
|
311
|
+
inputs = Array.from(input.parentElement.querySelectorAll('cosmoz-input')),
|
|
312
312
|
nextInput = inputs[inputs.findIndex(i => i === input) + 1],
|
|
313
313
|
isLastInput = !nextInput,
|
|
314
314
|
isFirstInput = inputs[0] === input;
|
|
@@ -349,7 +349,7 @@ export const rangeInputMixin = base => // eslint-disable-line max-lines-per-func
|
|
|
349
349
|
}
|
|
350
350
|
|
|
351
351
|
// focus the first input after the dropdown is visible
|
|
352
|
-
setTimeout(() => currentTarget.querySelector('
|
|
352
|
+
setTimeout(() => currentTarget.querySelector('cosmoz-input').focus(), 100);
|
|
353
353
|
}
|
|
354
354
|
|
|
355
355
|
|
|
@@ -2,6 +2,7 @@ import { _ } from '@neovici/cosmoz-i18next';
|
|
|
2
2
|
import { PolymerElement } from '@polymer/polymer';
|
|
3
3
|
import { html } from 'lit-html';
|
|
4
4
|
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
5
|
+
import '@neovici/cosmoz-input';
|
|
5
6
|
import { dateInputMixin } from './cosmoz-omnitable-date-input-mixin';
|
|
6
7
|
import { polymerHauntedRender } from './polymer-haunted-render-mixin';
|
|
7
8
|
|
|
@@ -28,20 +29,20 @@ class TimeRangeInput extends dateInputMixin(polymerHauntedRender(PolymerElement)
|
|
|
28
29
|
>
|
|
29
30
|
<div class="dropdown-content" slot="dropdown-content" style="padding: 15px; min-width: 100px;">
|
|
30
31
|
<h3 style="margin: 0;">${ this.title }</h3>
|
|
31
|
-
<
|
|
32
|
+
<cosmoz-input
|
|
32
33
|
type="time"
|
|
33
34
|
label=${ _('From time') }
|
|
34
35
|
step=${ this.filterStep }
|
|
35
36
|
.value=${ this._filterInput.min }
|
|
36
37
|
@value-changed=${ event => this.set('_filterInput.min', event.detail.value) }
|
|
37
|
-
></
|
|
38
|
-
<
|
|
38
|
+
></cosmoz-input>
|
|
39
|
+
<cosmoz-input
|
|
39
40
|
type="time"
|
|
40
41
|
label=${ _('Until time') }
|
|
41
42
|
step=${ this.filterStep }
|
|
42
43
|
.value=${ this._filterInput.max }
|
|
43
44
|
@value-changed=${ event => this.set('_filterInput.max', event.detail.value) }
|
|
44
|
-
></
|
|
45
|
+
></cosmoz-input>
|
|
45
46
|
</div>
|
|
46
47
|
</paper-dropdown-menu>
|
|
47
48
|
`;
|