UNPKG

@tangential/input-widgets

Version:

Input Widgets with persistable, dynamic configuration.

95 lines 11.5 kB
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