add internal sort panel.

This commit is contained in:
2024-01-26 17:27:24 +08:00
parent 984496e08e
commit ac605895c5
7 changed files with 520 additions and 121 deletions

View File

@ -111,7 +111,7 @@ export class GridDropdownColumn extends GridColumn {
wrapper: container.parentElement
});
drop.onSelected = trigger;
drop.onExpanded = function () {
drop.onExpanded = () => {
if (it.__editing == null) {
it.__editing = {
[col.key]: true
@ -161,10 +161,10 @@ export class GridDropdownColumn extends GridColumn {
return source;
}
static _setValue(source, element, val) {
const data = source?.find(v => v.value === val);
static _setValue(source, element, val, opts) {
const data = source?.find(v => v[opts?.valueKey ?? 'value'] === val);
if (data != null) {
val = data.text;
val = data[opts?.textKey ?? 'text'];
}
super.setValue(element, val);
}
@ -173,9 +173,9 @@ export class GridDropdownColumn extends GridColumn {
if (element.tagName !== 'DIV') {
let source = this._getSource(item, col);
if (source instanceof Promise) {
source.then(s => this._setValue(s, element, val));
source.then(s => this._setValue(s, element, val, col.dropOptions));
} else {
this._setValue(source, element, val);
this._setValue(source, element, val, col.dropOptions);
}
return;
}
@ -312,26 +312,35 @@ export class GridDateColumn extends GridColumn {
static setValue(element, val) {
if (element.tagName === 'INPUT') {
if (isNaN(val) || /^\d{4}-\d{2}-\d{2}$/.test(val)) {
element.value = val;
if (isNaN(val)) {
if (/^\d{4}-\d{2}-\d{2}$/.test(val)) {
element.value = val;
} else if (/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(val)) {
element.value = this._toDateValue(new Date(val));
} else {
element.value = '';
}
} else {
val = new Date((val - 621355968e9) / 1e4);
const month = String(val.getMonth() + 1).padStart(2, '0');
const date = String(val.getDate()).padStart(2, '0');
element.value = `${val.getFullYear()}-${month}-${date}`;
if (!(val instanceof Date)) {
val = new Date((val - 621355968e9) / 1e4);
}
element.value = this._toDateValue(val);
}
} else {
element.innerText = this.formatDate(val);
}
}
static getValue(e) {
static getValue(e, col) {
const date = e.target?.valueAsDate;
if (date instanceof Date && !isNaN(date)) {
const year = date.getFullYear();
if (year < 1900 || year > 9999) {
return '';
}
if (typeof col.dateValueFormatter === 'function') {
return col.dateValueFormatter(date);
}
return String(date.getTime() * 1e4 + 621355968e9);
}
return '';
@ -341,6 +350,15 @@ export class GridDateColumn extends GridColumn {
element.disabled = enabled === false;
}
static _toDateValue(dt) {
if (isNaN(dt)) {
return '';
}
const month = String(dt.getMonth() + 1).padStart(2, '0');
const date = String(dt.getDate()).padStart(2, '0');
return `${dt.getFullYear()}-${month}-${date}`;
}
static _resolveDate(s) {
if (s instanceof Date) {
return s;