@easyquery/ui 7.4.1-rc02 → 7.4.1-rc04
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +162 -162
- package/README.md +39 -39
- package/dist/assets/css/aggr-settings.css +240 -240
- package/dist/assets/css/easychart.css +71 -71
- package/dist/assets/css/easyquery-mobile.css +270 -270
- package/dist/assets/css/easyquery.css +1452 -1452
- package/dist/assets/css/easyquery.ui.css +2815 -2811
- package/dist/assets/css/eq-icons.css +114 -114
- package/dist/assets/css/themes.css +11 -11
- package/dist/assets/css/upgrade.css +454 -454
- package/dist/easyquery.ui.cjs.js +47 -12
- package/dist/easyquery.ui.esm.js +48 -13
- package/dist/types/facets/chart_facet.d.ts +1 -1
- package/dist/types/facets/datatable_facet.d.ts +1 -1
- package/dist/types/facets/pivot_table_facet.d.ts +1 -1
- package/dist/types/facets/result_facet.d.ts +1 -1
- package/dist/types/views/adv_search_view.d.ts +1 -0
- package/dist/types/views/report_view.d.ts +1 -0
- package/dist/types/widgets/columns_panel.d.ts +2 -2
- package/dist/types/widgets/query_panel.d.ts +1 -0
- package/dist/types/widgets/widget_options.d.ts +4 -1
- package/package.json +2 -2
package/dist/easyquery.ui.cjs.js
CHANGED
|
@@ -2822,7 +2822,6 @@ class AttrColumnRendererCP extends ColumnRendererCP {
|
|
|
2822
2822
|
.title(attrCaption)
|
|
2823
2823
|
.text(attrCaption) //TO DO:add localization
|
|
2824
2824
|
.on('click', (ev) => {
|
|
2825
|
-
console.log("columns expression click");
|
|
2826
2825
|
ev.stopPropagation();
|
|
2827
2826
|
this.activate();
|
|
2828
2827
|
this.panel.showEntitiesMenu({
|
|
@@ -3505,7 +3504,6 @@ class ColumnsPanel extends core.Widget {
|
|
|
3505
3504
|
.attr('href', 'javascript:void(0)')
|
|
3506
3505
|
.text(core$1.i18n.getText('CmdClickToAddColumn'))
|
|
3507
3506
|
.on('click', (e) => {
|
|
3508
|
-
console.log("Add new column");
|
|
3509
3507
|
e.preventDefault();
|
|
3510
3508
|
this.showEntitiesMenu({
|
|
3511
3509
|
anchor: e.target,
|
|
@@ -7391,6 +7389,9 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
|
|
|
7391
7389
|
showTimePicker: this.expression.dataType !== core$1.DataType.Date,
|
|
7392
7390
|
oneClickDateSelection: this.panel.options.oneClickDateSelection,
|
|
7393
7391
|
showDateTimeInput: this.panel.options.showDateTimeInput,
|
|
7392
|
+
minDate: this.panel.options.minDate,
|
|
7393
|
+
maxDate: this.panel.options.maxDate,
|
|
7394
|
+
defaultDate: this.panel.options.defaultDate,
|
|
7394
7395
|
onApply: (dateTime) => {
|
|
7395
7396
|
const value = this.convertToInternalFormat(dateTime);
|
|
7396
7397
|
this.setValue(value);
|
|
@@ -7412,17 +7413,20 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
|
|
|
7412
7413
|
: new ui.DefaultDateTimePicker(pickerOptions);
|
|
7413
7414
|
const model = this.expression.getModel();
|
|
7414
7415
|
const value = this.expression.value;
|
|
7415
|
-
let
|
|
7416
|
+
let dt;
|
|
7416
7417
|
if (this.expression.dataType != core$1.DataType.Time && model.isDateMacro(value)) {
|
|
7417
|
-
|
|
7418
|
+
dt = model.getDateMacroValue(value);
|
|
7418
7419
|
}
|
|
7419
7420
|
else if (this.expression.dataType == core$1.DataType.Time && model.isTimeMacro(value)) {
|
|
7420
|
-
|
|
7421
|
+
dt = model.getTimeMacroValue(value);
|
|
7421
7422
|
}
|
|
7422
7423
|
else {
|
|
7423
|
-
|
|
7424
|
+
const defaultDate = this.panel.options.defaultDate
|
|
7425
|
+
? ui.dateLikeToDate(this.panel.options.defaultDate)
|
|
7426
|
+
: new Date();
|
|
7427
|
+
dt = this.convertFromInternalFormat(value, defaultDate);
|
|
7424
7428
|
}
|
|
7425
|
-
this.dtp.setDateTime(
|
|
7429
|
+
this.dtp.setDateTime(dt);
|
|
7426
7430
|
this.dtp.show(this.element);
|
|
7427
7431
|
}
|
|
7428
7432
|
closeEditor() {
|
|
@@ -7451,6 +7455,8 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
|
|
|
7451
7455
|
&& ((this.panel.options.editableParts & exports.QPEditablePart.Value) === exports.QPEditablePart.Value);
|
|
7452
7456
|
}
|
|
7453
7457
|
convertFromInternalFormat(dateTimeStr, defautValue) {
|
|
7458
|
+
if (!dateTimeStr)
|
|
7459
|
+
return defautValue || new Date();
|
|
7454
7460
|
try {
|
|
7455
7461
|
return core$1.utils.strToDateTime(dateTimeStr, this.internalDateFormat + ' ' + this.internalTimeFormat);
|
|
7456
7462
|
}
|
|
@@ -7838,6 +7844,7 @@ class QueryPanel extends core.Widget {
|
|
|
7838
7844
|
this.slot.innerHTML = '';
|
|
7839
7845
|
}
|
|
7840
7846
|
getEntitiesMenu() {
|
|
7847
|
+
this.checkEntitiesMenu();
|
|
7841
7848
|
return this.entitiesMenu;
|
|
7842
7849
|
}
|
|
7843
7850
|
getConditionMenu() {
|
|
@@ -8024,7 +8031,7 @@ class QueryPanel extends core.Widget {
|
|
|
8024
8031
|
}
|
|
8025
8032
|
render() {
|
|
8026
8033
|
try {
|
|
8027
|
-
this.
|
|
8034
|
+
this.checkEntitiesMenu();
|
|
8028
8035
|
this.createConditionMenus();
|
|
8029
8036
|
this.createLinkTypeMenu();
|
|
8030
8037
|
this.rootContainer = ui.domel('div', this.slot)
|
|
@@ -8184,9 +8191,14 @@ class QueryPanel extends core.Widget {
|
|
|
8184
8191
|
core$1.utils.assign(options, this.options.menuOptions);
|
|
8185
8192
|
return new PopupMenu(options);
|
|
8186
8193
|
}
|
|
8194
|
+
checkEntitiesMenu() {
|
|
8195
|
+
if (!this.entitiesMenu) {
|
|
8196
|
+
this.entitiesMenu = this.createEntitiesMenu();
|
|
8197
|
+
}
|
|
8198
|
+
}
|
|
8187
8199
|
showEntitiesMenu(options) {
|
|
8200
|
+
this.checkEntitiesMenu();
|
|
8188
8201
|
this.entitiesMenu.showMenu(Object.assign({}, this.options.menuOptions, options));
|
|
8189
|
-
// this.entitiesMenu.showMenu(options);
|
|
8190
8202
|
}
|
|
8191
8203
|
createConditionMenus() {
|
|
8192
8204
|
//ConditionMenu
|
|
@@ -8484,7 +8496,6 @@ class FilterBar extends core.Widget {
|
|
|
8484
8496
|
.text(core$1.i18n.getText('StrNoFilterClickToAdd'))
|
|
8485
8497
|
.hide()
|
|
8486
8498
|
.on('click', () => {
|
|
8487
|
-
console.log("condition filter click");
|
|
8488
8499
|
this.queryPanel.showEntitiesMenu({
|
|
8489
8500
|
anchor: this.headerLinkElement,
|
|
8490
8501
|
selectedIds: null,
|
|
@@ -8565,8 +8576,8 @@ class FilterBar extends core.Widget {
|
|
|
8565
8576
|
}
|
|
8566
8577
|
}
|
|
8567
8578
|
textResize() {
|
|
8568
|
-
this.headerTextBlock.style.width = (this.slot.clientWidth - this.headerIconElement.offsetWidth
|
|
8569
|
-
|
|
8579
|
+
// this.headerTextBlock.style.width = (this.slot.clientWidth - this.headerIconElement.offsetWidth
|
|
8580
|
+
// - (domel(this.headerArrowBlock).isVisible() ? this.headerArrowBlock.offsetWidth : 0)) + "px";
|
|
8570
8581
|
}
|
|
8571
8582
|
destroyCore() {
|
|
8572
8583
|
if (this.queryPanel)
|
|
@@ -13236,6 +13247,14 @@ class AdvancedSearchView extends View {
|
|
|
13236
13247
|
}
|
|
13237
13248
|
});
|
|
13238
13249
|
}
|
|
13250
|
+
applyQueryNamePattern(input) {
|
|
13251
|
+
const allowedPattern = /[a-zA-Z0-9\s_\[\]()\@\$\#\&\-\.]/;
|
|
13252
|
+
input.addEventListener('keydown', (e) => {
|
|
13253
|
+
if (e.key.length === 1 && !allowedPattern.test(e.key) && !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Enter'].includes(e.key)) {
|
|
13254
|
+
e.preventDefault();
|
|
13255
|
+
}
|
|
13256
|
+
});
|
|
13257
|
+
}
|
|
13239
13258
|
// ------------------ Dialog wrappers ---------------------
|
|
13240
13259
|
showNewQueryDialog(callback) {
|
|
13241
13260
|
const ds = this.context.getServices().getService('DialogService');
|
|
@@ -13250,6 +13269,7 @@ class AdvancedSearchView extends View {
|
|
|
13250
13269
|
arrangeParents: false,
|
|
13251
13270
|
beforeOpen: () => {
|
|
13252
13271
|
const input = document.getElementById(`kdlg-dialog-form-input`);
|
|
13272
|
+
this.applyQueryNamePattern(input);
|
|
13253
13273
|
if (defVal) {
|
|
13254
13274
|
input.value = defVal;
|
|
13255
13275
|
}
|
|
@@ -13308,6 +13328,7 @@ class AdvancedSearchView extends View {
|
|
|
13308
13328
|
arrangeParents: false,
|
|
13309
13329
|
beforeOpen: () => {
|
|
13310
13330
|
const input = document.getElementById(`kdlg-dialog-form-input`);
|
|
13331
|
+
this.applyQueryNamePattern(input);
|
|
13311
13332
|
input.value = newQueryName;
|
|
13312
13333
|
const content = document.getElementById('kdlg-dialog-form-content');
|
|
13313
13334
|
content.innerHTML = core$1.i18n.getText('SaveQueryContent');
|
|
@@ -13352,6 +13373,10 @@ class AdvancedSearchView extends View {
|
|
|
13352
13373
|
const dlg = ds.open({
|
|
13353
13374
|
title: core$1.i18n.getText('SaveQueryToFileDlgTitle'),
|
|
13354
13375
|
body: body,
|
|
13376
|
+
beforeOpen: () => {
|
|
13377
|
+
const fileNameInput = body.querySelector('#kdlgFileNameInput');
|
|
13378
|
+
this.applyQueryNamePattern(fileNameInput);
|
|
13379
|
+
},
|
|
13355
13380
|
onSubmit: () => {
|
|
13356
13381
|
const fileNameInput = body.querySelector('#kdlgFileNameInput');
|
|
13357
13382
|
const fileName = fileNameInput ? fileNameInput.value : "Query";
|
|
@@ -13836,6 +13861,14 @@ class ReportView extends View {
|
|
|
13836
13861
|
this.reportListSlot = document.getElementById('ReportList');
|
|
13837
13862
|
this.resultCountSlot = this.resolveElement(resultCountSpan);
|
|
13838
13863
|
}
|
|
13864
|
+
applyReportNamePattern(input) {
|
|
13865
|
+
const allowedPattern = /[a-zA-Z0-9\s_\[\]()\@\$\#\&\-\.]/;
|
|
13866
|
+
input.addEventListener('keydown', (e) => {
|
|
13867
|
+
if (e.key.length === 1 && !allowedPattern.test(e.key) && !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Enter'].includes(e.key)) {
|
|
13868
|
+
e.preventDefault();
|
|
13869
|
+
}
|
|
13870
|
+
});
|
|
13871
|
+
}
|
|
13839
13872
|
/**
|
|
13840
13873
|
* Creates a new report.
|
|
13841
13874
|
*/
|
|
@@ -13851,6 +13884,7 @@ class ReportView extends View {
|
|
|
13851
13884
|
arrangeParents: false,
|
|
13852
13885
|
beforeOpen: () => {
|
|
13853
13886
|
const nameInput = document.getElementById(`kdlg-dialog-form-input`);
|
|
13887
|
+
this.applyReportNamePattern(nameInput);
|
|
13854
13888
|
nameInput.value = core$1.i18n.getText('NewReportDefName');
|
|
13855
13889
|
const nameLabel = document.getElementById('kdlg-dialog-form-name-label');
|
|
13856
13890
|
nameLabel.innerHTML = core$1.i18n.getText('SaveReportDlgLabel');
|
|
@@ -13948,6 +13982,7 @@ class ReportView extends View {
|
|
|
13948
13982
|
arrangeParents: false,
|
|
13949
13983
|
beforeOpen: () => {
|
|
13950
13984
|
const input = document.getElementById(`kdlg-dialog-form-input`);
|
|
13985
|
+
this.applyReportNamePattern(input);
|
|
13951
13986
|
input.value = query.getName();
|
|
13952
13987
|
const content = document.getElementById('kdlg-dialog-form-name-label');
|
|
13953
13988
|
content.innerHTML = core$1.i18n.getText('SaveReportDlgLabel');
|
package/dist/easyquery.ui.esm.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { utils, i18n, DataType, EasyDataTable, AggregationSettings } from '@easydata/core';
|
|
2
2
|
import { Widget, WidgetGroup, QueryChangePart, QueryChangeAction, ExprTag, SortDirection, i18n as i18n$1, equtils, eqconsts, ConditionPart, DataKind, Query, Expression, CondTag, EqEditorTag, EqValueEditor, EqServiceProvider, createEqContext } from '@easyquery/core';
|
|
3
|
-
import { browserUtils, eqDragManager, getElementAbsolutePos, getScrollPos, getWinSize, getViewportSize, domel, DropEffect, createBrowserEvent, DomElementBuilder, DefaultDateTimePicker, slideDown, slideUp, EasyGrid, addCssClass, hideElement, showElement, isVisible, toggleVisibility, addElement, DefaultDialogService } from '@easydata/ui';
|
|
3
|
+
import { browserUtils, eqDragManager, getElementAbsolutePos, getScrollPos, getWinSize, getViewportSize, domel, DropEffect, createBrowserEvent, DomElementBuilder, DefaultDateTimePicker, dateLikeToDate, slideDown, slideUp, EasyGrid, addCssClass, hideElement, showElement, isVisible, toggleVisibility, addElement, DefaultDialogService } from '@easydata/ui';
|
|
4
4
|
|
|
5
5
|
function findHighestZIndex(elem) {
|
|
6
6
|
let highest = 0;
|
|
@@ -2820,7 +2820,6 @@ class AttrColumnRendererCP extends ColumnRendererCP {
|
|
|
2820
2820
|
.title(attrCaption)
|
|
2821
2821
|
.text(attrCaption) //TO DO:add localization
|
|
2822
2822
|
.on('click', (ev) => {
|
|
2823
|
-
console.log("columns expression click");
|
|
2824
2823
|
ev.stopPropagation();
|
|
2825
2824
|
this.activate();
|
|
2826
2825
|
this.panel.showEntitiesMenu({
|
|
@@ -3503,7 +3502,6 @@ class ColumnsPanel extends Widget {
|
|
|
3503
3502
|
.attr('href', 'javascript:void(0)')
|
|
3504
3503
|
.text(i18n.getText('CmdClickToAddColumn'))
|
|
3505
3504
|
.on('click', (e) => {
|
|
3506
|
-
console.log("Add new column");
|
|
3507
3505
|
e.preventDefault();
|
|
3508
3506
|
this.showEntitiesMenu({
|
|
3509
3507
|
anchor: e.target,
|
|
@@ -7389,6 +7387,9 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
|
|
|
7389
7387
|
showTimePicker: this.expression.dataType !== DataType.Date,
|
|
7390
7388
|
oneClickDateSelection: this.panel.options.oneClickDateSelection,
|
|
7391
7389
|
showDateTimeInput: this.panel.options.showDateTimeInput,
|
|
7390
|
+
minDate: this.panel.options.minDate,
|
|
7391
|
+
maxDate: this.panel.options.maxDate,
|
|
7392
|
+
defaultDate: this.panel.options.defaultDate,
|
|
7392
7393
|
onApply: (dateTime) => {
|
|
7393
7394
|
const value = this.convertToInternalFormat(dateTime);
|
|
7394
7395
|
this.setValue(value);
|
|
@@ -7410,17 +7411,20 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
|
|
|
7410
7411
|
: new DefaultDateTimePicker(pickerOptions);
|
|
7411
7412
|
const model = this.expression.getModel();
|
|
7412
7413
|
const value = this.expression.value;
|
|
7413
|
-
let
|
|
7414
|
+
let dt;
|
|
7414
7415
|
if (this.expression.dataType != DataType.Time && model.isDateMacro(value)) {
|
|
7415
|
-
|
|
7416
|
+
dt = model.getDateMacroValue(value);
|
|
7416
7417
|
}
|
|
7417
7418
|
else if (this.expression.dataType == DataType.Time && model.isTimeMacro(value)) {
|
|
7418
|
-
|
|
7419
|
+
dt = model.getTimeMacroValue(value);
|
|
7419
7420
|
}
|
|
7420
7421
|
else {
|
|
7421
|
-
|
|
7422
|
+
const defaultDate = this.panel.options.defaultDate
|
|
7423
|
+
? dateLikeToDate(this.panel.options.defaultDate)
|
|
7424
|
+
: new Date();
|
|
7425
|
+
dt = this.convertFromInternalFormat(value, defaultDate);
|
|
7422
7426
|
}
|
|
7423
|
-
this.dtp.setDateTime(
|
|
7427
|
+
this.dtp.setDateTime(dt);
|
|
7424
7428
|
this.dtp.show(this.element);
|
|
7425
7429
|
}
|
|
7426
7430
|
closeEditor() {
|
|
@@ -7449,6 +7453,8 @@ class DateTimeExpressionRenderer extends ExpressionRenderer {
|
|
|
7449
7453
|
&& ((this.panel.options.editableParts & QPEditablePart.Value) === QPEditablePart.Value);
|
|
7450
7454
|
}
|
|
7451
7455
|
convertFromInternalFormat(dateTimeStr, defautValue) {
|
|
7456
|
+
if (!dateTimeStr)
|
|
7457
|
+
return defautValue || new Date();
|
|
7452
7458
|
try {
|
|
7453
7459
|
return utils.strToDateTime(dateTimeStr, this.internalDateFormat + ' ' + this.internalTimeFormat);
|
|
7454
7460
|
}
|
|
@@ -7836,6 +7842,7 @@ class QueryPanel extends Widget {
|
|
|
7836
7842
|
this.slot.innerHTML = '';
|
|
7837
7843
|
}
|
|
7838
7844
|
getEntitiesMenu() {
|
|
7845
|
+
this.checkEntitiesMenu();
|
|
7839
7846
|
return this.entitiesMenu;
|
|
7840
7847
|
}
|
|
7841
7848
|
getConditionMenu() {
|
|
@@ -8022,7 +8029,7 @@ class QueryPanel extends Widget {
|
|
|
8022
8029
|
}
|
|
8023
8030
|
render() {
|
|
8024
8031
|
try {
|
|
8025
|
-
this.
|
|
8032
|
+
this.checkEntitiesMenu();
|
|
8026
8033
|
this.createConditionMenus();
|
|
8027
8034
|
this.createLinkTypeMenu();
|
|
8028
8035
|
this.rootContainer = domel('div', this.slot)
|
|
@@ -8182,9 +8189,14 @@ class QueryPanel extends Widget {
|
|
|
8182
8189
|
utils.assign(options, this.options.menuOptions);
|
|
8183
8190
|
return new PopupMenu(options);
|
|
8184
8191
|
}
|
|
8192
|
+
checkEntitiesMenu() {
|
|
8193
|
+
if (!this.entitiesMenu) {
|
|
8194
|
+
this.entitiesMenu = this.createEntitiesMenu();
|
|
8195
|
+
}
|
|
8196
|
+
}
|
|
8185
8197
|
showEntitiesMenu(options) {
|
|
8198
|
+
this.checkEntitiesMenu();
|
|
8186
8199
|
this.entitiesMenu.showMenu(Object.assign({}, this.options.menuOptions, options));
|
|
8187
|
-
// this.entitiesMenu.showMenu(options);
|
|
8188
8200
|
}
|
|
8189
8201
|
createConditionMenus() {
|
|
8190
8202
|
//ConditionMenu
|
|
@@ -8482,7 +8494,6 @@ class FilterBar extends Widget {
|
|
|
8482
8494
|
.text(i18n.getText('StrNoFilterClickToAdd'))
|
|
8483
8495
|
.hide()
|
|
8484
8496
|
.on('click', () => {
|
|
8485
|
-
console.log("condition filter click");
|
|
8486
8497
|
this.queryPanel.showEntitiesMenu({
|
|
8487
8498
|
anchor: this.headerLinkElement,
|
|
8488
8499
|
selectedIds: null,
|
|
@@ -8563,8 +8574,8 @@ class FilterBar extends Widget {
|
|
|
8563
8574
|
}
|
|
8564
8575
|
}
|
|
8565
8576
|
textResize() {
|
|
8566
|
-
this.headerTextBlock.style.width = (this.slot.clientWidth - this.headerIconElement.offsetWidth
|
|
8567
|
-
|
|
8577
|
+
// this.headerTextBlock.style.width = (this.slot.clientWidth - this.headerIconElement.offsetWidth
|
|
8578
|
+
// - (domel(this.headerArrowBlock).isVisible() ? this.headerArrowBlock.offsetWidth : 0)) + "px";
|
|
8568
8579
|
}
|
|
8569
8580
|
destroyCore() {
|
|
8570
8581
|
if (this.queryPanel)
|
|
@@ -13234,6 +13245,14 @@ class AdvancedSearchView extends View {
|
|
|
13234
13245
|
}
|
|
13235
13246
|
});
|
|
13236
13247
|
}
|
|
13248
|
+
applyQueryNamePattern(input) {
|
|
13249
|
+
const allowedPattern = /[a-zA-Z0-9\s_\[\]()\@\$\#\&\-\.]/;
|
|
13250
|
+
input.addEventListener('keydown', (e) => {
|
|
13251
|
+
if (e.key.length === 1 && !allowedPattern.test(e.key) && !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Enter'].includes(e.key)) {
|
|
13252
|
+
e.preventDefault();
|
|
13253
|
+
}
|
|
13254
|
+
});
|
|
13255
|
+
}
|
|
13237
13256
|
// ------------------ Dialog wrappers ---------------------
|
|
13238
13257
|
showNewQueryDialog(callback) {
|
|
13239
13258
|
const ds = this.context.getServices().getService('DialogService');
|
|
@@ -13248,6 +13267,7 @@ class AdvancedSearchView extends View {
|
|
|
13248
13267
|
arrangeParents: false,
|
|
13249
13268
|
beforeOpen: () => {
|
|
13250
13269
|
const input = document.getElementById(`kdlg-dialog-form-input`);
|
|
13270
|
+
this.applyQueryNamePattern(input);
|
|
13251
13271
|
if (defVal) {
|
|
13252
13272
|
input.value = defVal;
|
|
13253
13273
|
}
|
|
@@ -13306,6 +13326,7 @@ class AdvancedSearchView extends View {
|
|
|
13306
13326
|
arrangeParents: false,
|
|
13307
13327
|
beforeOpen: () => {
|
|
13308
13328
|
const input = document.getElementById(`kdlg-dialog-form-input`);
|
|
13329
|
+
this.applyQueryNamePattern(input);
|
|
13309
13330
|
input.value = newQueryName;
|
|
13310
13331
|
const content = document.getElementById('kdlg-dialog-form-content');
|
|
13311
13332
|
content.innerHTML = i18n.getText('SaveQueryContent');
|
|
@@ -13350,6 +13371,10 @@ class AdvancedSearchView extends View {
|
|
|
13350
13371
|
const dlg = ds.open({
|
|
13351
13372
|
title: i18n.getText('SaveQueryToFileDlgTitle'),
|
|
13352
13373
|
body: body,
|
|
13374
|
+
beforeOpen: () => {
|
|
13375
|
+
const fileNameInput = body.querySelector('#kdlgFileNameInput');
|
|
13376
|
+
this.applyQueryNamePattern(fileNameInput);
|
|
13377
|
+
},
|
|
13353
13378
|
onSubmit: () => {
|
|
13354
13379
|
const fileNameInput = body.querySelector('#kdlgFileNameInput');
|
|
13355
13380
|
const fileName = fileNameInput ? fileNameInput.value : "Query";
|
|
@@ -13834,6 +13859,14 @@ class ReportView extends View {
|
|
|
13834
13859
|
this.reportListSlot = document.getElementById('ReportList');
|
|
13835
13860
|
this.resultCountSlot = this.resolveElement(resultCountSpan);
|
|
13836
13861
|
}
|
|
13862
|
+
applyReportNamePattern(input) {
|
|
13863
|
+
const allowedPattern = /[a-zA-Z0-9\s_\[\]()\@\$\#\&\-\.]/;
|
|
13864
|
+
input.addEventListener('keydown', (e) => {
|
|
13865
|
+
if (e.key.length === 1 && !allowedPattern.test(e.key) && !['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'Tab', 'Enter'].includes(e.key)) {
|
|
13866
|
+
e.preventDefault();
|
|
13867
|
+
}
|
|
13868
|
+
});
|
|
13869
|
+
}
|
|
13837
13870
|
/**
|
|
13838
13871
|
* Creates a new report.
|
|
13839
13872
|
*/
|
|
@@ -13849,6 +13882,7 @@ class ReportView extends View {
|
|
|
13849
13882
|
arrangeParents: false,
|
|
13850
13883
|
beforeOpen: () => {
|
|
13851
13884
|
const nameInput = document.getElementById(`kdlg-dialog-form-input`);
|
|
13885
|
+
this.applyReportNamePattern(nameInput);
|
|
13852
13886
|
nameInput.value = i18n.getText('NewReportDefName');
|
|
13853
13887
|
const nameLabel = document.getElementById('kdlg-dialog-form-name-label');
|
|
13854
13888
|
nameLabel.innerHTML = i18n.getText('SaveReportDlgLabel');
|
|
@@ -13946,6 +13980,7 @@ class ReportView extends View {
|
|
|
13946
13980
|
arrangeParents: false,
|
|
13947
13981
|
beforeOpen: () => {
|
|
13948
13982
|
const input = document.getElementById(`kdlg-dialog-form-input`);
|
|
13983
|
+
this.applyReportNamePattern(input);
|
|
13949
13984
|
input.value = query.getName();
|
|
13950
13985
|
const content = document.getElementById('kdlg-dialog-form-name-label');
|
|
13951
13986
|
content.innerHTML = i18n.getText('SaveReportDlgLabel');
|
|
@@ -6,7 +6,7 @@ export declare class ChartFacet extends ResultFacet {
|
|
|
6
6
|
protected chart: ChartWidget;
|
|
7
7
|
title: string;
|
|
8
8
|
protected settings: any;
|
|
9
|
-
protected dialogTitle:
|
|
9
|
+
protected dialogTitle: any;
|
|
10
10
|
init(slot: HTMLElement): void;
|
|
11
11
|
destroy(): void;
|
|
12
12
|
getType(): FacetType;
|
|
@@ -4,7 +4,7 @@ import { FacetType } from '../types/facet_type';
|
|
|
4
4
|
export declare class DataTableFacet extends ResultFacet {
|
|
5
5
|
protected grid: Widget;
|
|
6
6
|
title: string;
|
|
7
|
-
protected dialogTitle:
|
|
7
|
+
protected dialogTitle: any;
|
|
8
8
|
init(slot: HTMLElement): void;
|
|
9
9
|
getSettings(): any;
|
|
10
10
|
protected reinitGrid(): void;
|
|
@@ -21,7 +21,7 @@ interface CrossTabOptions {
|
|
|
21
21
|
export declare class PivotTableFacet extends ResultFacet {
|
|
22
22
|
protected grid: EasyGrid;
|
|
23
23
|
title: string;
|
|
24
|
-
protected dialogTitle:
|
|
24
|
+
protected dialogTitle: any;
|
|
25
25
|
protected pivotTable: EasyDataTable;
|
|
26
26
|
protected settings: CrossTabOptions;
|
|
27
27
|
init(slot: HTMLElement): void;
|
|
@@ -10,7 +10,7 @@ export declare abstract class ResultFacet {
|
|
|
10
10
|
private displayMessageDiv;
|
|
11
11
|
title: string;
|
|
12
12
|
protected cssPrefix: string;
|
|
13
|
-
protected dialogTitle:
|
|
13
|
+
protected dialogTitle: any;
|
|
14
14
|
protected options: any;
|
|
15
15
|
protected canDisplayFlag: boolean;
|
|
16
16
|
constructor(container: FacetContainer, options?: any);
|
|
@@ -72,6 +72,7 @@ export declare class AdvancedSearchView extends View {
|
|
|
72
72
|
checkIfQueryModified(callback: any): void;
|
|
73
73
|
protected removeCurrentQuery(): void;
|
|
74
74
|
private _querySaveTemplate;
|
|
75
|
+
private applyQueryNamePattern;
|
|
75
76
|
protected showNewQueryDialog(callback: (result: string) => Promise<DlgCallbackResult>): void;
|
|
76
77
|
protected showQueryClearDialog(callback: (result: boolean) => void): void;
|
|
77
78
|
protected showQueryChangedDialog(callback: (result: boolean) => void): void;
|
|
@@ -51,11 +51,11 @@ export declare class ColumnsPanel extends Widget {
|
|
|
51
51
|
private createEntitiesMenu;
|
|
52
52
|
getSortMenuList(): {
|
|
53
53
|
id: string;
|
|
54
|
-
text:
|
|
54
|
+
text: any;
|
|
55
55
|
}[];
|
|
56
56
|
getMoveMenuList(): {
|
|
57
57
|
id: string;
|
|
58
|
-
text:
|
|
58
|
+
text: any;
|
|
59
59
|
}[];
|
|
60
60
|
private createSortMenu;
|
|
61
61
|
private createMoveMenu;
|
|
@@ -63,6 +63,7 @@ export declare class QueryPanel extends Widget {
|
|
|
63
63
|
getOperatorRenderer(condition: Condition, text: string, slot?: HTMLDivElement): BaseElementRenderer | null;
|
|
64
64
|
getAddRowRenderer(slot?: HTMLDivElement): BaseElementRenderer | null;
|
|
65
65
|
private createEntitiesMenu;
|
|
66
|
+
protected checkEntitiesMenu(): void;
|
|
66
67
|
showEntitiesMenu(options: PopupMenuOptions): void;
|
|
67
68
|
private createConditionMenus;
|
|
68
69
|
private createLinkTypeMenu;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Query, Condition, Expression, Widget, EqValueEditor } from '@easyquery/core';
|
|
2
2
|
import { EasyDataTable } from '@easydata/core';
|
|
3
|
-
import { DateTimePicker, DateTimePickerOptions } from '@easydata/ui';
|
|
3
|
+
import { DateTimePicker, DateTimePickerOptions, DateLike } from '@easydata/ui';
|
|
4
4
|
import { ConditionRenderer } from './renderers/querypanel/condition_renderer';
|
|
5
5
|
import { ExpressionRenderer } from './renderers/querypanel/expression_renderer';
|
|
6
6
|
import { BaseElementRenderer } from './renderers/base_element_renderer';
|
|
@@ -382,6 +382,9 @@ export interface QueryPanelOptions {
|
|
|
382
382
|
dateTimePickerResolver?: (options: DateTimePickerOptions) => DateTimePicker;
|
|
383
383
|
/** Gets or sets the edit mode option: Full, FixedList or ReadOnly */
|
|
384
384
|
editMode?: ConditionsEditMode;
|
|
385
|
+
minDate?: DateLike;
|
|
386
|
+
maxDate?: DateLike;
|
|
387
|
+
defaultDate?: DateLike;
|
|
385
388
|
}
|
|
386
389
|
/**
|
|
387
390
|
* Grid options type.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@easyquery/ui",
|
|
3
|
-
"version": "7.4.1-
|
|
3
|
+
"version": "7.4.1-rc04",
|
|
4
4
|
"description": "EasyQuery.JS Community UI widgets",
|
|
5
5
|
"types": "./dist/types/public_api.d.ts",
|
|
6
6
|
"main": "./dist/easyquery.ui.cjs.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"bugs": "https://korzh.com/support",
|
|
31
31
|
"license": "LGPL-3.0",
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@easyquery/core": "^7.4.1-
|
|
33
|
+
"@easyquery/core": "^7.4.1-rc04"
|
|
34
34
|
},
|
|
35
35
|
"files": [
|
|
36
36
|
"dist",
|