export DateSelector, fix issue about column.align and filter panel position of the last header cell.
This commit is contained in:
		@@ -1,7 +1,13 @@
 | 
			
		||||
import { createElement } from "../functions";
 | 
			
		||||
 | 
			
		||||
export function createDateInput(min, max) {
 | 
			
		||||
    const date = createElement('input', 'ui-date-cell');
 | 
			
		||||
export function createDateInput(min, max, element) {
 | 
			
		||||
    let date;
 | 
			
		||||
    if (element instanceof HTMLInputElement) {
 | 
			
		||||
        date = element;
 | 
			
		||||
        date.classList.add('ui-date-cell');
 | 
			
		||||
    } else {
 | 
			
		||||
        date = createElement('input', 'ui-date-cell');
 | 
			
		||||
    }
 | 
			
		||||
    date.required = true;
 | 
			
		||||
    date.type = 'date';
 | 
			
		||||
    if (min != null) {
 | 
			
		||||
@@ -89,16 +95,15 @@ export class DateSelector {
 | 
			
		||||
 | 
			
		||||
    constructor(opts) {
 | 
			
		||||
        opts ??= {};
 | 
			
		||||
        if (typeof opts.parent === 'string') {
 | 
			
		||||
            opts.parent = document.querySelector(opts.parent);
 | 
			
		||||
        }
 | 
			
		||||
        if (!(opts.parent instanceof HTMLElement)) {
 | 
			
		||||
            throw new Error('no specified parent.');
 | 
			
		||||
        }
 | 
			
		||||
        this._var.options = opts;
 | 
			
		||||
        this._var.parent = opts.parent;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        const el = createDateInput(opts.minDate, opts.maxDate);
 | 
			
		||||
    create(element) {
 | 
			
		||||
        const opts = this._var.options;
 | 
			
		||||
        const el = createDateInput(opts.minDate, opts.maxDate, element);
 | 
			
		||||
        if (element == null) {
 | 
			
		||||
            el.disabled = opts.enabled === false;
 | 
			
		||||
        }
 | 
			
		||||
        el.addEventListener('blur', e => {
 | 
			
		||||
            const date = this._getDate(e.target.valueAsDate);
 | 
			
		||||
            if (date == null) {
 | 
			
		||||
@@ -109,9 +114,11 @@ export class DateSelector {
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        this._var.el = el;
 | 
			
		||||
        parent.appendChild(el);
 | 
			
		||||
        return el;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    get element() { return this._var.el }
 | 
			
		||||
 | 
			
		||||
    get enabled() { return !this._var.el.disabled }
 | 
			
		||||
    set enabled(flag) {
 | 
			
		||||
        this._var.el.disabled = flag === false;
 | 
			
		||||
@@ -122,16 +129,13 @@ export class DateSelector {
 | 
			
		||||
        setDateValue(this._var.el, val);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} date
 | 
			
		||||
     */
 | 
			
		||||
    get minDate() { return this._var.el.min }
 | 
			
		||||
    set minDate(date) {
 | 
			
		||||
        this._var.el.min = date;
 | 
			
		||||
        this._var.options.minDate = date;
 | 
			
		||||
    }
 | 
			
		||||
    /**
 | 
			
		||||
     * @param {string} date
 | 
			
		||||
     */
 | 
			
		||||
 | 
			
		||||
    get maxDate() { return this._var.el.max }
 | 
			
		||||
    set maxDate(date) {
 | 
			
		||||
        this._var.el.max = date;
 | 
			
		||||
        this._var.options.maxDate = date;
 | 
			
		||||
@@ -150,4 +154,23 @@ export class DateSelector {
 | 
			
		||||
        }
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static resolve(dom = document.body, trigger) {
 | 
			
		||||
        const dates = dom.querySelectorAll('input[data-type="date"]');
 | 
			
		||||
        for (let dat of dates) {
 | 
			
		||||
            const val = dat.value;
 | 
			
		||||
            const dateSelector = new DateSelector({
 | 
			
		||||
                minDate: dat.getAttribute('data-min'),
 | 
			
		||||
                maxDate: dat.getAttribute('data-max')
 | 
			
		||||
            });
 | 
			
		||||
            if (typeof trigger === 'function') {
 | 
			
		||||
                dateSelector.onDateChanged = date => trigger.call(dateSelector, date);
 | 
			
		||||
            }
 | 
			
		||||
            dat.removeAttribute('data-type');
 | 
			
		||||
            dat.removeAttribute('data-min');
 | 
			
		||||
            dat.removeAttribute('data-max');
 | 
			
		||||
            dateSelector.create(dat);
 | 
			
		||||
            dateSelector.value = val;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user