@easyquery/ui 7.4.1-rc03 → 7.4.1

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.
@@ -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 dateTime = new Date();
7416
+ let dt;
7416
7417
  if (this.expression.dataType != core$1.DataType.Time && model.isDateMacro(value)) {
7417
- dateTime = model.getDateMacroValue(value);
7418
+ dt = model.getDateMacroValue(value);
7418
7419
  }
7419
7420
  else if (this.expression.dataType == core$1.DataType.Time && model.isTimeMacro(value)) {
7420
- dateTime = model.getTimeMacroValue(value);
7421
+ dt = model.getTimeMacroValue(value);
7421
7422
  }
7422
7423
  else {
7423
- dateTime = this.convertFromInternalFormat(value, new Date());
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(dateTime);
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
  }
@@ -13241,6 +13247,14 @@ class AdvancedSearchView extends View {
13241
13247
  }
13242
13248
  });
13243
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
+ }
13244
13258
  // ------------------ Dialog wrappers ---------------------
13245
13259
  showNewQueryDialog(callback) {
13246
13260
  const ds = this.context.getServices().getService('DialogService');
@@ -13255,6 +13269,7 @@ class AdvancedSearchView extends View {
13255
13269
  arrangeParents: false,
13256
13270
  beforeOpen: () => {
13257
13271
  const input = document.getElementById(`kdlg-dialog-form-input`);
13272
+ this.applyQueryNamePattern(input);
13258
13273
  if (defVal) {
13259
13274
  input.value = defVal;
13260
13275
  }
@@ -13313,6 +13328,7 @@ class AdvancedSearchView extends View {
13313
13328
  arrangeParents: false,
13314
13329
  beforeOpen: () => {
13315
13330
  const input = document.getElementById(`kdlg-dialog-form-input`);
13331
+ this.applyQueryNamePattern(input);
13316
13332
  input.value = newQueryName;
13317
13333
  const content = document.getElementById('kdlg-dialog-form-content');
13318
13334
  content.innerHTML = core$1.i18n.getText('SaveQueryContent');
@@ -13357,6 +13373,10 @@ class AdvancedSearchView extends View {
13357
13373
  const dlg = ds.open({
13358
13374
  title: core$1.i18n.getText('SaveQueryToFileDlgTitle'),
13359
13375
  body: body,
13376
+ beforeOpen: () => {
13377
+ const fileNameInput = body.querySelector('#kdlgFileNameInput');
13378
+ this.applyQueryNamePattern(fileNameInput);
13379
+ },
13360
13380
  onSubmit: () => {
13361
13381
  const fileNameInput = body.querySelector('#kdlgFileNameInput');
13362
13382
  const fileName = fileNameInput ? fileNameInput.value : "Query";
@@ -13841,6 +13861,14 @@ class ReportView extends View {
13841
13861
  this.reportListSlot = document.getElementById('ReportList');
13842
13862
  this.resultCountSlot = this.resolveElement(resultCountSpan);
13843
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
+ }
13844
13872
  /**
13845
13873
  * Creates a new report.
13846
13874
  */
@@ -13856,6 +13884,7 @@ class ReportView extends View {
13856
13884
  arrangeParents: false,
13857
13885
  beforeOpen: () => {
13858
13886
  const nameInput = document.getElementById(`kdlg-dialog-form-input`);
13887
+ this.applyReportNamePattern(nameInput);
13859
13888
  nameInput.value = core$1.i18n.getText('NewReportDefName');
13860
13889
  const nameLabel = document.getElementById('kdlg-dialog-form-name-label');
13861
13890
  nameLabel.innerHTML = core$1.i18n.getText('SaveReportDlgLabel');
@@ -13953,6 +13982,7 @@ class ReportView extends View {
13953
13982
  arrangeParents: false,
13954
13983
  beforeOpen: () => {
13955
13984
  const input = document.getElementById(`kdlg-dialog-form-input`);
13985
+ this.applyReportNamePattern(input);
13956
13986
  input.value = query.getName();
13957
13987
  const content = document.getElementById('kdlg-dialog-form-name-label');
13958
13988
  content.innerHTML = core$1.i18n.getText('SaveReportDlgLabel');
@@ -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 dateTime = new Date();
7414
+ let dt;
7414
7415
  if (this.expression.dataType != DataType.Time && model.isDateMacro(value)) {
7415
- dateTime = model.getDateMacroValue(value);
7416
+ dt = model.getDateMacroValue(value);
7416
7417
  }
7417
7418
  else if (this.expression.dataType == DataType.Time && model.isTimeMacro(value)) {
7418
- dateTime = model.getTimeMacroValue(value);
7419
+ dt = model.getTimeMacroValue(value);
7419
7420
  }
7420
7421
  else {
7421
- dateTime = this.convertFromInternalFormat(value, new Date());
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(dateTime);
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
  }
@@ -13239,6 +13245,14 @@ class AdvancedSearchView extends View {
13239
13245
  }
13240
13246
  });
13241
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
+ }
13242
13256
  // ------------------ Dialog wrappers ---------------------
13243
13257
  showNewQueryDialog(callback) {
13244
13258
  const ds = this.context.getServices().getService('DialogService');
@@ -13253,6 +13267,7 @@ class AdvancedSearchView extends View {
13253
13267
  arrangeParents: false,
13254
13268
  beforeOpen: () => {
13255
13269
  const input = document.getElementById(`kdlg-dialog-form-input`);
13270
+ this.applyQueryNamePattern(input);
13256
13271
  if (defVal) {
13257
13272
  input.value = defVal;
13258
13273
  }
@@ -13311,6 +13326,7 @@ class AdvancedSearchView extends View {
13311
13326
  arrangeParents: false,
13312
13327
  beforeOpen: () => {
13313
13328
  const input = document.getElementById(`kdlg-dialog-form-input`);
13329
+ this.applyQueryNamePattern(input);
13314
13330
  input.value = newQueryName;
13315
13331
  const content = document.getElementById('kdlg-dialog-form-content');
13316
13332
  content.innerHTML = i18n.getText('SaveQueryContent');
@@ -13355,6 +13371,10 @@ class AdvancedSearchView extends View {
13355
13371
  const dlg = ds.open({
13356
13372
  title: i18n.getText('SaveQueryToFileDlgTitle'),
13357
13373
  body: body,
13374
+ beforeOpen: () => {
13375
+ const fileNameInput = body.querySelector('#kdlgFileNameInput');
13376
+ this.applyQueryNamePattern(fileNameInput);
13377
+ },
13358
13378
  onSubmit: () => {
13359
13379
  const fileNameInput = body.querySelector('#kdlgFileNameInput');
13360
13380
  const fileName = fileNameInput ? fileNameInput.value : "Query";
@@ -13839,6 +13859,14 @@ class ReportView extends View {
13839
13859
  this.reportListSlot = document.getElementById('ReportList');
13840
13860
  this.resultCountSlot = this.resolveElement(resultCountSpan);
13841
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
+ }
13842
13870
  /**
13843
13871
  * Creates a new report.
13844
13872
  */
@@ -13854,6 +13882,7 @@ class ReportView extends View {
13854
13882
  arrangeParents: false,
13855
13883
  beforeOpen: () => {
13856
13884
  const nameInput = document.getElementById(`kdlg-dialog-form-input`);
13885
+ this.applyReportNamePattern(nameInput);
13857
13886
  nameInput.value = i18n.getText('NewReportDefName');
13858
13887
  const nameLabel = document.getElementById('kdlg-dialog-form-name-label');
13859
13888
  nameLabel.innerHTML = i18n.getText('SaveReportDlgLabel');
@@ -13951,6 +13980,7 @@ class ReportView extends View {
13951
13980
  arrangeParents: false,
13952
13981
  beforeOpen: () => {
13953
13982
  const input = document.getElementById(`kdlg-dialog-form-input`);
13983
+ this.applyReportNamePattern(input);
13954
13984
  input.value = query.getName();
13955
13985
  const content = document.getElementById('kdlg-dialog-form-name-label');
13956
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: string;
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: string;
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: string;
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: string;
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;
@@ -47,6 +47,7 @@ export declare class ReportView extends View {
47
47
  protected initDone(): void;
48
48
  protected createWidgets(options?: ReportViewOptions): void;
49
49
  private _reportSaveTemplate;
50
+ private applyReportNamePattern;
50
51
  /**
51
52
  * Creates a new report.
52
53
  */
@@ -51,11 +51,11 @@ export declare class ColumnsPanel extends Widget {
51
51
  private createEntitiesMenu;
52
52
  getSortMenuList(): {
53
53
  id: string;
54
- text: string;
54
+ text: any;
55
55
  }[];
56
56
  getMoveMenuList(): {
57
57
  id: string;
58
- text: string;
58
+ text: any;
59
59
  }[];
60
60
  private createSortMenu;
61
61
  private createMoveMenu;
@@ -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-rc03",
3
+ "version": "7.4.1",
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-rc03"
33
+ "@easyquery/core": "^7.4.1"
34
34
  },
35
35
  "files": [
36
36
  "dist",