Source: ui/slider/TimeSlider.js

import { Slider } from './Slider.js';

export { TimeSlider };

/**
 * A slider based on Date objects as specialization of Slider.
 * 
 * Events:
 * * changed
 *
 * @author rkoppe <roland.koppe@awi.de>
 * @author rhess <robin.hess@awi.de>
 * @memberof vef.ui.slider
 */
class TimeSlider extends Slider {

    /**
     * @param {string} target 
     * @param {object} options 
     */
    constructor(target, options) {
        const _options = Object.assign({}, options);

        if (_options.min && (_options.min instanceof Date)) _options.min = options.min.getTime();
        if (_options.max && (_options.max instanceof Date)) _options.max = options.max.getTime();
        if (_options.value) {
            if (typeof _options.value === 'object') {
                if (_options.value.left && (_options.value.left instanceof Date)) _options.value.left = _options.value.left.getTime();
                if (_options.value.right && (_options.value.right instanceof Date)) _options.value.right = _options.value.right.getTime();
            } else {
                if (_options.value && (_options.value instanceof Date)) _options.value = _options.value.getTime();
            }
        }
        super(target, _options);
    }

    /**
     * Return the current value of the slider handle.
     * returns an Object with properties {@code left} and {@code right}
     * of the slider has two handles
     * 
     * @override
     */
    getValue() {
        const value = super.getValue();
        // transform integer timestamps to Date objects
        if (this.options_.handles == 1) {
            return new Date(value);
        } else {
            return {
                left: new Date(value.left),
                right: new Date(value.right)
            };
        }
    }

    /**
     * Update the current value of the slider handle.
     * For sliders with two handles {@code value} has to be an
     * Object with the properties {@code left} and {@code right}
     * 
     * @param {Date | object} value
     * @override
     */
    setValue(value) {
        if ((typeof value === 'object') && !(value instanceof Date)) {
            if (value.left && (value.left instanceof Date)) value.left = value.left.getTime();
            if (value.right && (value.right instanceof Date)) value.right = value.right.getTime();
        } else {
            if (value && (value instanceof Date)) value = value.getTime();
        }
        super.setValue(value);
    }
}