@tangential/input-widgets
Version:
Input Widgets with persistable, dynamic configuration.
95 lines • 11.5 kB
JavaScript
import { TimeUnits } from '@tangential/core';
import * as moment from 'moment/moment';
export class DurationPickerFieldsState {
constructor(picker, unit) {
this.picker = picker;
this.index = 0;
this.unit = TimeUnits.h;
this.selected = false;
this.unit = unit;
this.selected = false;
}
get label() {
return this.unit.label;
}
canSelect() {
let can;
const count = this.picker.selectedCount();
if (count >= 3) {
can = false;
}
else if (count === 0) {
can = true;
}
else {
can = this.previous?.selected || this.next?.selected || false;
}
return can;
}
canDeselect() {
/* If next and previous are selected then you cannot deselect this one. */
return (!this.previous || !this.next || !this.previous.selected || !this.next.selected);
}
canToggleSelection() {
return this.selected ? this.canDeselect() : this.canSelect();
}
get value() {
let result;
if (this.previous && this.previous.selected) {
result = this.picker.duration.get(this.unit.momentKey);
}
else {
result = this.picker.duration.as(this.unit.momentKey);
}
return Math.floor(result);
}
set value(val) {
if (val >= 0) {
const prev = this.value;
this.picker.duration.add(val - prev, this.unit.momentKey);
}
}
get separator() {
return this.unit.separatorSuffix;
}
get max() {
return (this.previous && this.previous.selected) ? this.unit.logicalMax : 9999;
}
}
/** @todo: ggranum: Remove use of MomentJS if possible. */
export class DurationPickerState {
constructor() {
this.fields = [];
this.fieldsByKey = {};
this.duration = moment.duration(0);
this.max = 100;
this.fields = [
new DurationPickerFieldsState(this, TimeUnits.day), new DurationPickerFieldsState(this, TimeUnits.h),
new DurationPickerFieldsState(this, TimeUnits.min), new DurationPickerFieldsState(this, TimeUnits.s),
new DurationPickerFieldsState(this, TimeUnits.ms),
];
for (let i = 0; i < this.fields.length; i++) {
const f = this.fields[i];
f.next = this.fields[i + 1];
f.previous = this.fields[i - 1];
f.index = i;
this.fieldsByKey[f.unit.unitKey] = f;
}
}
selectedFields() {
return this.fields.filter(f => f.selected);
}
selectedCount() {
return this.selectedFields().length;
}
setDuration(duration) {
this.duration = duration;
}
select(unit) {
this.fieldsByKey[unit.unitKey].selected = true;
}
get millis() {
return this.duration.asMilliseconds();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVyYXRpb24tcGlja2VyLXN0YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ2VudGlhbC9pbnB1dC13aWRnZXRzL3NyYy9saWIvZHVyYXRpb24tcGlja2VyLXdpZGdldC9kdXJhdGlvbi1waWNrZXItc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFBO0FBRXpCLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE1BQU0sT0FBTyx5QkFBeUI7SUFPcEMsWUFBbUIsTUFBMkIsRUFBRSxJQUFjO1FBQTNDLFdBQU0sR0FBTixNQUFNLENBQXFCO1FBTjlDLFVBQUssR0FBVyxDQUFDLENBQUE7UUFDakIsU0FBSSxHQUFhLFNBQVMsQ0FBQyxDQUFDLENBQUE7UUFDNUIsYUFBUSxHQUFZLEtBQUssQ0FBQTtRQUt2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtJQUN2QixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQTtJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksR0FBWSxDQUFBO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDekMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2QsR0FBRyxHQUFHLEtBQUssQ0FBQTtTQUNaO2FBQU0sSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLEdBQUcsR0FBRyxJQUFJLENBQUE7U0FDWDthQUFNO1lBQ0wsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQTtT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Q0FBQyxDQUFBO1lBQzNCLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7WUFDL0IsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7WUFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBRXJDO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxDQUFBO0lBQ3JDLENBQUM7SUFHRCxXQUFXLENBQUMsUUFBa0I7UUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDMUIsQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFjO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7SUFDaEQsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUN2QyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBPYmpNYXAsXG4gIFRpbWVVbml0LFxuICBUaW1lVW5pdHNcbn0gZnJvbSAnQHRhbmdlbnRpYWwvY29yZSdcbmltcG9ydCB7RHVyYXRpb259IGZyb20gJ21vbWVudCdcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQvbW9tZW50J1xuZXhwb3J0IGNsYXNzIER1cmF0aW9uUGlja2VyRmllbGRzU3RhdGUge1xuICBpbmRleDogbnVtYmVyID0gMFxuICB1bml0OiBUaW1lVW5pdCA9IFRpbWVVbml0cy5oXG4gIHNlbGVjdGVkOiBib29sZWFuID0gZmFsc2VcbiAgbmV4dDogRHVyYXRpb25QaWNrZXJGaWVsZHNTdGF0ZSB8IHVuZGVmaW5lZFxuICBwcmV2aW91czogRHVyYXRpb25QaWNrZXJGaWVsZHNTdGF0ZSB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwaWNrZXI6IER1cmF0aW9uUGlja2VyU3RhdGUsIHVuaXQ6IFRpbWVVbml0KSB7XG4gICAgdGhpcy51bml0ID0gdW5pdFxuICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZVxuICB9XG5cbiAgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudW5pdC5sYWJlbFxuICB9XG5cbiAgY2FuU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIGxldCBjYW46IGJvb2xlYW5cbiAgICBjb25zdCBjb3VudCA9IHRoaXMucGlja2VyLnNlbGVjdGVkQ291bnQoKVxuICAgIGlmIChjb3VudCA+PSAzKSB7XG4gICAgICBjYW4gPSBmYWxzZVxuICAgIH0gZWxzZSBpZiAoY291bnQgPT09IDApIHtcbiAgICAgIGNhbiA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgY2FuID0gdGhpcy5wcmV2aW91cz8uc2VsZWN0ZWQgfHwgdGhpcy5uZXh0Py5zZWxlY3RlZCB8fCBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gY2FuXG4gIH1cblxuICBjYW5EZXNlbGVjdCgpOiBib29sZWFuIHtcbiAgICAvKiBJZiBuZXh0IGFuZCBwcmV2aW91cyBhcmUgc2VsZWN0ZWQgdGhlbiB5b3UgY2Fubm90IGRlc2VsZWN0IHRoaXMgb25lLiAqL1xuICAgIHJldHVybiAoIXRoaXMucHJldmlvdXMgfHwgIXRoaXMubmV4dCB8fCAhdGhpcy5wcmV2aW91cy5zZWxlY3RlZCB8fCAhdGhpcy5uZXh0LnNlbGVjdGVkKVxuICB9XG5cbiAgY2FuVG9nZ2xlU2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkID8gdGhpcy5jYW5EZXNlbGVjdCgpIDogdGhpcy5jYW5TZWxlY3QoKVxuICB9XG5cblxuICBnZXQgdmFsdWUoKTogbnVtYmVyIHtcbiAgICBsZXQgcmVzdWx0OiBudW1iZXJcbiAgICBpZiAodGhpcy5wcmV2aW91cyAmJiB0aGlzLnByZXZpb3VzLnNlbGVjdGVkKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLnBpY2tlci5kdXJhdGlvbi5nZXQodGhpcy51bml0Lm1vbWVudEtleSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5waWNrZXIuZHVyYXRpb24uYXModGhpcy51bml0Lm1vbWVudEtleSlcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmVzdWx0KVxuICB9XG5cbiAgc2V0IHZhbHVlKHZhbDogbnVtYmVyKSB7XG4gICAgaWYgKHZhbCA+PSAwKSB7XG4gICAgICBjb25zdCBwcmV2ID0gdGhpcy52YWx1ZVxuICAgICAgdGhpcy5waWNrZXIuZHVyYXRpb24uYWRkKHZhbCAtIHByZXYsIHRoaXMudW5pdC5tb21lbnRLZXkpXG4gICAgfVxuICB9XG5cbiAgZ2V0IHNlcGFyYXRvcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnVuaXQuc2VwYXJhdG9yU3VmZml4XG4gIH1cblxuICBnZXQgbWF4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnByZXZpb3VzICYmIHRoaXMucHJldmlvdXMuc2VsZWN0ZWQpID8gdGhpcy51bml0LmxvZ2ljYWxNYXggOiA5OTk5XG4gIH1cbn1cbi8qKiBAdG9kbzogZ2dyYW51bTogUmVtb3ZlIHVzZSBvZiBNb21lbnRKUyBpZiBwb3NzaWJsZS4gKi9cbmV4cG9ydCBjbGFzcyBEdXJhdGlvblBpY2tlclN0YXRlIHtcblxuICBwdWJsaWMgZmllbGRzOiBEdXJhdGlvblBpY2tlckZpZWxkc1N0YXRlW10gPSBbXVxuICBmaWVsZHNCeUtleTogT2JqTWFwPER1cmF0aW9uUGlja2VyRmllbGRzU3RhdGU+ID0ge31cbiAgZHVyYXRpb246IER1cmF0aW9uID0gbW9tZW50LmR1cmF0aW9uKDApXG4gIG1heDogbnVtYmVyID0gMTAwXG5cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmZpZWxkcyA9IFtcbiAgICAgIG5ldyBEdXJhdGlvblBpY2tlckZpZWxkc1N0YXRlKHRoaXMsIFRpbWVVbml0cy5kYXkpLCBuZXcgRHVyYXRpb25QaWNrZXJGaWVsZHNTdGF0ZSh0aGlzLCBUaW1lVW5pdHMuaCksXG4gICAgICBuZXcgRHVyYXRpb25QaWNrZXJGaWVsZHNTdGF0ZSh0aGlzLCBUaW1lVW5pdHMubWluKSwgbmV3IER1cmF0aW9uUGlja2VyRmllbGRzU3RhdGUodGhpcywgVGltZVVuaXRzLnMpLFxuICAgICAgbmV3IER1cmF0aW9uUGlja2VyRmllbGRzU3RhdGUodGhpcywgVGltZVVuaXRzLm1zKSwgXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maWVsZHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGYgPSB0aGlzLmZpZWxkc1tpXVxuICAgICAgZi5uZXh0ID0gdGhpcy5maWVsZHNbaSArIDFdXG4gICAgICBmLnByZXZpb3VzID0gdGhpcy5maWVsZHNbaSAtIDFdXG4gICAgICBmLmluZGV4ID0gaVxuICAgICAgdGhpcy5maWVsZHNCeUtleVtmLnVuaXQudW5pdEtleV0gPSBmXG5cbiAgICB9XG4gIH1cblxuICBzZWxlY3RlZEZpZWxkcygpOiBEdXJhdGlvblBpY2tlckZpZWxkc1N0YXRlW10ge1xuICAgIHJldHVybiB0aGlzLmZpZWxkcy5maWx0ZXIoZiA9PiBmLnNlbGVjdGVkKVxuICB9XG5cbiAgc2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRmllbGRzKCkubGVuZ3RoXG4gIH1cblxuXG4gIHNldER1cmF0aW9uKGR1cmF0aW9uOiBEdXJhdGlvbikge1xuICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvblxuICB9XG5cbiAgc2VsZWN0KHVuaXQ6IFRpbWVVbml0KSB7XG4gICAgdGhpcy5maWVsZHNCeUtleVt1bml0LnVuaXRLZXldLnNlbGVjdGVkID0gdHJ1ZVxuICB9XG5cbiAgZ2V0IG1pbGxpcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmR1cmF0aW9uLmFzTWlsbGlzZWNvbmRzKClcbiAgfVxufVxuIl19