ngx-rs-ant 1.8.4 → 1.8.6

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.
@@ -2,9 +2,10 @@ import * as i0 from '@angular/core';
2
2
  import { Component, Input, HostBinding, EventEmitter, Output, HostListener, ViewContainerRef, ViewChild, Directive, ViewChildren, NgModule, Injectable, ContentChild } from '@angular/core';
3
3
  import { PluginFactory } from 'coast-plugin-register';
4
4
  import * as i1 from '@angular/common';
5
- import { CommonModule, formatDate } from '@angular/common';
6
- import { Subject, ReplaySubject, Subscription, map, firstValueFrom, of, lastValueFrom, debounceTime, interval } from 'rxjs';
5
+ import { formatDate, CommonModule } from '@angular/common';
6
+ import { firstValueFrom, of, Subject, ReplaySubject, Subscription, map, lastValueFrom, debounceTime, interval } from 'rxjs';
7
7
  import * as i2 from 'devextreme-angular/ui/number-box';
8
+ import notify from 'devextreme/ui/notify';
8
9
  import * as i2$1 from 'devextreme-angular/ui/draggable';
9
10
  import { DevExtremeModule, DxValidationGroupComponent, DxDataGridComponent } from 'devextreme-angular';
10
11
  import BpmnModeler from 'camunda-bpmn-js/lib/camunda-platform/Modeler';
@@ -13,7 +14,6 @@ import { isLabel } from 'diagram-js/lib/util/ModelUtil';
13
14
  import * as i3 from 'devextreme-angular/ui/button';
14
15
  import Viewer from 'camunda-bpmn-js/lib/camunda-platform/NavigatedViewer';
15
16
  import * as i1$1 from '@angular/common/http';
16
- import notify from 'devextreme/ui/notify';
17
17
  import CustomStore from 'devextreme/data/custom_store';
18
18
  import * as i2$2 from 'devextreme-angular/core';
19
19
  import * as i5 from 'devextreme-angular/ui/data-grid';
@@ -308,6 +308,183 @@ class FormItemComponentBase extends ComponentBase {
308
308
  class ModalComponentBase extends ComponentBase {
309
309
  }
310
310
 
311
+ function notify_error(message) {
312
+ _notify(message, 12000, 'warning');
313
+ }
314
+ function notify_warning(message) {
315
+ _notify(message, 8000, 'warning');
316
+ }
317
+ function notify_success(message) {
318
+ _notify(message, 4000, 'success');
319
+ }
320
+ function _notify(message, time, type) {
321
+ notify({
322
+ displayTime: time,
323
+ message,
324
+ type: type,
325
+ closeOnSwipe: false,
326
+ minWidth: 200,
327
+ maxWidth: 500,
328
+ wrapperAttr: { class: 'global-toast-message' }
329
+ }, {
330
+ direction: 'up-push',
331
+ position: 'bottom right'
332
+ });
333
+ }
334
+ function format_date(date, locale) {
335
+ return formatDate(date, 'yyyy/MM/dd', locale, 'GMT+8');
336
+ }
337
+ function format_datetime(date, locale) {
338
+ return formatDate(date, 'yyyy/MM/dd HH:mm:ss', locale, 'GMT+8');
339
+ }
340
+ function localeSortMethod(value1, value2) {
341
+ return value1.localeCompare(value2);
342
+ }
343
+ function file_type_icon(name) {
344
+ const type = name.substring(name.lastIndexOf('.') + 1).toLocaleLowerCase();
345
+ switch (type) {
346
+ case 'doc':
347
+ case 'docx':
348
+ return 'word';
349
+ case 'xls':
350
+ case 'xlsx':
351
+ case 'csv':
352
+ return 'excel';
353
+ case 'ppt':
354
+ case 'pptx':
355
+ return 'ppt';
356
+ case 'pdf':
357
+ return 'pdf';
358
+ case 'txt':
359
+ case 'xml':
360
+ case 'json':
361
+ case 'js':
362
+ return 'text';
363
+ case 'png':
364
+ case 'jpg':
365
+ case 'jpeg':
366
+ case 'gif':
367
+ case 'bmp':
368
+ return 'image';
369
+ case 'zip':
370
+ case 'rar':
371
+ case '7z':
372
+ case 'jar':
373
+ return 'zip';
374
+ default:
375
+ return 'unknown';
376
+ }
377
+ }
378
+ function support_preview_ext() {
379
+ return ['pdf', 'png', 'jpg', 'jpeg', 'gif', 'bmp', 'doc', 'docx', 'txt', 'xml', 'json', 'js', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'];
380
+ }
381
+ function format_file_size(size) {
382
+ const labels = ['b', 'Kb', 'Mb', 'Gb'];
383
+ const count = labels.length - 1;
384
+ let i = 0;
385
+ while (i < count && size >= 1024) {
386
+ size /= 1024;
387
+ i++;
388
+ }
389
+ return Math.round(size * 100) / 100 + " " + labels[i];
390
+ }
391
+ function filename_from_disposition(disposition) {
392
+ const filenamePair = disposition.split(';').filter(str => /^filename=/.test(str.trim())).pop();
393
+ if (filenamePair) {
394
+ let str = filenamePair.trim();
395
+ str = str.split('=')[1];
396
+ str = str.replace(/['"]/g, '');
397
+ return decodeURIComponent(str);
398
+ }
399
+ else {
400
+ return null;
401
+ }
402
+ }
403
+ function download_file(blob, filename, callback) {
404
+ const url = window.webkitURL.createObjectURL(blob);
405
+ const a = document.createElement('a');
406
+ document.body.appendChild(a);
407
+ a.setAttribute('style', 'display:none');
408
+ a.setAttribute('href', url);
409
+ a.setAttribute('download', decodeURIComponent(filename));
410
+ a.click();
411
+ setTimeout(() => {
412
+ if (callback) {
413
+ callback();
414
+ }
415
+ a.remove();
416
+ });
417
+ }
418
+ async function validate(validator) {
419
+ return new Promise(resolve => {
420
+ if (!validator) {
421
+ resolve(true);
422
+ }
423
+ const validateResult = validator.instance.validate();
424
+ if (!validateResult.isValid) {
425
+ resolve(false);
426
+ }
427
+ if (validateResult.status === 'pending') {
428
+ validateResult.complete?.then((result) => {
429
+ if (result.isValid) {
430
+ resolve(true);
431
+ }
432
+ else {
433
+ resolve(false);
434
+ }
435
+ });
436
+ }
437
+ else {
438
+ resolve(true);
439
+ }
440
+ });
441
+ }
442
+ async function validate_group(validationGroup) {
443
+ if (!validationGroup) {
444
+ return firstValueFrom(of(true));
445
+ }
446
+ const top = validationGroup.element.nativeElement;
447
+ let sourceNode;
448
+ const targetClassName = 'dx-field';
449
+ const findTargetNode = (node) => {
450
+ sourceNode = node;
451
+ while (true) {
452
+ if (node.classList.contains(targetClassName)) {
453
+ return node;
454
+ }
455
+ else {
456
+ node = node.parentElement;
457
+ if (node === top) {
458
+ return sourceNode;
459
+ }
460
+ }
461
+ }
462
+ };
463
+ return new Promise(resolve => {
464
+ const validateResult = validationGroup.instance.validate();
465
+ if (!validateResult.isValid) {
466
+ const brokenElement = (validateResult.brokenRules?.[0]).validator.element();
467
+ findTargetNode(brokenElement).scrollIntoView();
468
+ resolve(false);
469
+ }
470
+ if (validateResult.status === 'pending') {
471
+ validateResult.complete?.then((result) => {
472
+ if (result.isValid) {
473
+ resolve(true);
474
+ }
475
+ else {
476
+ const brokenElement = (result.brokenRules?.[0]).validator.element();
477
+ findTargetNode(brokenElement).scrollIntoView();
478
+ resolve(false);
479
+ }
480
+ });
481
+ }
482
+ else {
483
+ resolve(true);
484
+ }
485
+ });
486
+ }
487
+
311
488
  class PluginManager {
312
489
  static createComponent(boxItem, index, style, config) {
313
490
  let plugin = PluginFactory.get(config.name);
@@ -326,27 +503,36 @@ class PluginManager {
326
503
  Object.assign(instance, config.pluginConfig);
327
504
  if (PluginFactory.hasType(plugin, 'page')) {
328
505
  if (!(instance instanceof PageItemComponentBase)) {
329
- console.warn('page item component need extending PageItemComponentBase, name: ' + config.name);
506
+ console.error('page item component need extending PageItemComponentBase, name: ' + config.name);
507
+ notify_error('加载页面组件失败:' + config.name);
508
+ return;
330
509
  }
331
510
  instance.editMode = boxItem.boxContainer.editMode;
332
- instance.tabId = boxItem.boxContainer.tabId;
511
+ instance.tabId = boxItem.boxContainer.params?.__tabId;
333
512
  }
334
513
  if (PluginFactory.hasType(plugin, 'form')) {
335
514
  if (!(instance instanceof FormItemComponentBase)) {
336
- console.warn('form item component need extending FormItemComponentBase, name: ' + config.name);
515
+ console.error('form item component need extending FormItemComponentBase, name: ' + config.name);
516
+ notify_error('加载表单组件失败:' + config.name);
517
+ return;
337
518
  }
338
519
  instance.editMode = boxItem.boxContainer.editMode;
339
- instance.model = boxItem.boxContainer.model;
340
- instance.opener = boxItem.boxContainer.opener;
520
+ instance.tenant = boxItem.boxContainer.params?.__form.tenant;
521
+ instance.className = boxItem.boxContainer.params?.__form.className;
522
+ instance.oid = boxItem.boxContainer.params?.__form.oid;
523
+ instance.model = boxItem.boxContainer.params?.__model;
524
+ instance.opener = boxItem.boxContainer.params?.__opener;
341
525
  if (boxItem.boxContainer.readonly) {
342
526
  instance.readonly = true;
343
527
  }
344
528
  }
345
529
  if (PluginFactory.hasType(plugin, 'modal')) {
346
530
  if (!(instance instanceof ModalComponentBase)) {
347
- console.warn('modal component need extending ModalComponentBase, name: ' + config.name);
531
+ console.error('modal component need extending ModalComponentBase, name: ' + config.name);
532
+ notify_error('加载模窗组件失败:' + config.name);
533
+ return;
348
534
  }
349
- instance.opener = boxItem.boxContainer.opener;
535
+ instance.opener = boxItem.boxContainer.params?.__opener;
350
536
  }
351
537
  instance.params = boxItem.boxContainer.params;
352
538
  instance.tabViewContainerRef = boxItem.boxContainer.tabViewContainerRef;
@@ -454,7 +640,7 @@ class PluginManager {
454
640
  });
455
641
  return activeComponentRef;
456
642
  }
457
- static resetItemConfig(itemConfigContainerRef, item, fieldTree) {
643
+ static resetItemConfig(itemConfigContainerRef, item, params) {
458
644
  itemConfigContainerRef.clear();
459
645
  if (!item) {
460
646
  itemConfigContainerRef.createComponent(ConfigBlankComponent);
@@ -467,14 +653,20 @@ class PluginManager {
467
653
  const instance = componentRef.instance;
468
654
  if (PluginFactory.hasType(plugin, 'page')) {
469
655
  if (!(instance instanceof PageItemConfigBase)) {
470
- console.warn('page item component config need extending PageItemConfigBase, name: ' + plugin.name);
656
+ console.error('page item component config need extending PageItemConfigBase, name: ' + plugin.name);
657
+ notify_error('加载页面组件配置失败:' + plugin.name);
658
+ return;
471
659
  }
472
660
  }
473
661
  if (PluginFactory.hasType(plugin, 'form')) {
474
662
  if (!(instance instanceof FormItemConfigBase)) {
475
- console.warn('form item component config need extending FormItemConfigBase, name: ' + plugin.name);
663
+ console.error('form item component config need extending FormItemConfigBase, name: ' + plugin.name);
664
+ notify_error('加载表单组件配置失败:' + plugin.name);
665
+ return;
476
666
  }
477
- instance.fieldTree = fieldTree;
667
+ instance.tenant = params.tenant;
668
+ instance.className = params.className;
669
+ instance.fieldTree = params.fieldTree;
478
670
  }
479
671
  instance.config = item.config.pluginConfig;
480
672
  instance.configChange.subscribe((reload) => {
@@ -518,18 +710,18 @@ class ItemConfigComponent {
518
710
  if (data.id !== this.id) {
519
711
  return;
520
712
  }
521
- PluginManager.resetItemConfig(this.itemConfigContainerRef, data.item, this.fieldTree);
713
+ PluginManager.resetItemConfig(this.itemConfigContainerRef, data.item, this.params);
522
714
  });
523
715
  }
524
716
  }
525
717
  ItemConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ItemConfigComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
526
- ItemConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ItemConfigComponent, selector: "rs-item-config", inputs: { id: "id", fieldTree: "fieldTree" }, viewQueries: [{ propertyName: "itemConfigContainerRef", first: true, predicate: ["itemConfigContainerRef"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container #itemConfigContainerRef></ng-container>\n", styles: [""] });
718
+ ItemConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ItemConfigComponent, selector: "rs-item-config", inputs: { id: "id", params: "params" }, viewQueries: [{ propertyName: "itemConfigContainerRef", first: true, predicate: ["itemConfigContainerRef"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container #itemConfigContainerRef></ng-container>\n", styles: [""] });
527
719
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ItemConfigComponent, decorators: [{
528
720
  type: Component,
529
721
  args: [{ selector: 'rs-item-config', template: "<ng-container #itemConfigContainerRef></ng-container>\n" }]
530
722
  }], propDecorators: { id: [{
531
723
  type: Input
532
- }], fieldTree: [{
724
+ }], params: [{
533
725
  type: Input
534
726
  }], itemConfigContainerRef: [{
535
727
  type: ViewChild,
@@ -903,7 +1095,7 @@ class BoxContainerComponent {
903
1095
  }
904
1096
  }
905
1097
  BoxContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BoxContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
906
- BoxContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BoxContainerComponent, selector: "rs-box-container", inputs: { id: "id", editMode: "editMode", config: "config", model: "model", opener: "opener", params: "params", readonly: "readonly", tabId: "tabId", tabViewContainerRef: "tabViewContainerRef" }, viewQueries: [{ propertyName: "boxContainerContent", first: true, predicate: ["boxContainerContent"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container #boxContainerContent></ng-container>\n", styles: [":host{flex:1;position:relative;display:flex;flex-flow:row nowrap}\n"] });
1098
+ BoxContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BoxContainerComponent, selector: "rs-box-container", inputs: { id: "id", editMode: "editMode", config: "config", params: "params", readonly: "readonly", tabViewContainerRef: "tabViewContainerRef" }, viewQueries: [{ propertyName: "boxContainerContent", first: true, predicate: ["boxContainerContent"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container #boxContainerContent></ng-container>\n", styles: [":host{flex:1;position:relative;display:flex;flex-flow:row nowrap}\n"] });
907
1099
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BoxContainerComponent, decorators: [{
908
1100
  type: Component,
909
1101
  args: [{ selector: 'rs-box-container', template: "<ng-container #boxContainerContent></ng-container>\n", styles: [":host{flex:1;position:relative;display:flex;flex-flow:row nowrap}\n"] }]
@@ -913,16 +1105,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
913
1105
  type: Input
914
1106
  }], config: [{
915
1107
  type: Input
916
- }], model: [{
917
- type: Input
918
- }], opener: [{
919
- type: Input
920
1108
  }], params: [{
921
1109
  type: Input
922
1110
  }], readonly: [{
923
1111
  type: Input
924
- }], tabId: [{
925
- type: Input
926
1112
  }], tabViewContainerRef: [{
927
1113
  type: Input
928
1114
  }], boxContainerContent: [{
@@ -1757,9 +1943,20 @@ class DataGridService {
1757
1943
  };
1758
1944
  }));
1759
1945
  }
1760
- getConstraintEntries(name) {
1761
- return this.http.get('api/metadata/constraint/' + name).pipe(map(response => {
1762
- return response.data;
1946
+ getConstraintEntries(tenant, name) {
1947
+ return this.http.get('api/metadata/constraint/' + name, {
1948
+ params: {
1949
+ tenant
1950
+ }
1951
+ }).pipe(map(response => {
1952
+ const entries = [];
1953
+ for (let entry of response.data) {
1954
+ entries.push({
1955
+ store: entry.store,
1956
+ display: entry.enabled ? entry.display : entry.display + '(已禁用)'
1957
+ });
1958
+ }
1959
+ return entries;
1763
1960
  }));
1764
1961
  }
1765
1962
  getUserColumnDataSource(tenant, className, view, field) {
@@ -1863,183 +2060,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1863
2060
  }]
1864
2061
  }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; } });
1865
2062
 
1866
- function notify_error(message) {
1867
- _notify(message, 12000, 'warning');
1868
- }
1869
- function notify_warning(message) {
1870
- _notify(message, 8000, 'warning');
1871
- }
1872
- function notify_success(message) {
1873
- _notify(message, 4000, 'success');
1874
- }
1875
- function _notify(message, time, type) {
1876
- notify({
1877
- displayTime: time,
1878
- message,
1879
- type: type,
1880
- closeOnSwipe: false,
1881
- minWidth: 200,
1882
- maxWidth: 500,
1883
- wrapperAttr: { class: 'global-toast-message' }
1884
- }, {
1885
- direction: 'up-push',
1886
- position: 'bottom right'
1887
- });
1888
- }
1889
- function format_date(date, locale) {
1890
- return formatDate(date, 'yyyy/MM/dd', locale, 'GMT+8');
1891
- }
1892
- function format_datetime(date, locale) {
1893
- return formatDate(date, 'yyyy/MM/dd HH:mm:ss', locale, 'GMT+8');
1894
- }
1895
- function localeSortMethod(value1, value2) {
1896
- return value1.localeCompare(value2);
1897
- }
1898
- function file_type_icon(name) {
1899
- const type = name.substring(name.lastIndexOf('.') + 1).toLocaleLowerCase();
1900
- switch (type) {
1901
- case 'doc':
1902
- case 'docx':
1903
- return 'word';
1904
- case 'xls':
1905
- case 'xlsx':
1906
- case 'csv':
1907
- return 'excel';
1908
- case 'ppt':
1909
- case 'pptx':
1910
- return 'ppt';
1911
- case 'pdf':
1912
- return 'pdf';
1913
- case 'txt':
1914
- case 'xml':
1915
- case 'json':
1916
- case 'js':
1917
- return 'text';
1918
- case 'png':
1919
- case 'jpg':
1920
- case 'jpeg':
1921
- case 'gif':
1922
- case 'bmp':
1923
- return 'image';
1924
- case 'zip':
1925
- case 'rar':
1926
- case '7z':
1927
- case 'jar':
1928
- return 'zip';
1929
- default:
1930
- return 'unknown';
1931
- }
1932
- }
1933
- function support_preview_ext() {
1934
- return ['pdf', 'png', 'jpg', 'jpeg', 'gif', 'bmp', 'doc', 'docx', 'txt', 'xml', 'json', 'js', 'xls', 'xlsx', 'csv', 'ppt', 'pptx'];
1935
- }
1936
- function format_file_size(size) {
1937
- const labels = ['b', 'Kb', 'Mb', 'Gb'];
1938
- const count = labels.length - 1;
1939
- let i = 0;
1940
- while (i < count && size >= 1024) {
1941
- size /= 1024;
1942
- i++;
1943
- }
1944
- return Math.round(size * 100) / 100 + " " + labels[i];
1945
- }
1946
- function filename_from_disposition(disposition) {
1947
- const filenamePair = disposition.split(';').filter(str => /^filename=/.test(str.trim())).pop();
1948
- if (filenamePair) {
1949
- let str = filenamePair.trim();
1950
- str = str.split('=')[1];
1951
- str = str.replace(/['"]/g, '');
1952
- return decodeURIComponent(str);
1953
- }
1954
- else {
1955
- return null;
1956
- }
1957
- }
1958
- function download_file(blob, filename, callback) {
1959
- const url = window.webkitURL.createObjectURL(blob);
1960
- const a = document.createElement('a');
1961
- document.body.appendChild(a);
1962
- a.setAttribute('style', 'display:none');
1963
- a.setAttribute('href', url);
1964
- a.setAttribute('download', decodeURIComponent(filename));
1965
- a.click();
1966
- setTimeout(() => {
1967
- if (callback) {
1968
- callback();
1969
- }
1970
- a.remove();
1971
- });
1972
- }
1973
- async function validate(validator) {
1974
- return new Promise(resolve => {
1975
- if (!validator) {
1976
- resolve(true);
1977
- }
1978
- const validateResult = validator.instance.validate();
1979
- if (!validateResult.isValid) {
1980
- resolve(false);
1981
- }
1982
- if (validateResult.status === 'pending') {
1983
- validateResult.complete?.then((result) => {
1984
- if (result.isValid) {
1985
- resolve(true);
1986
- }
1987
- else {
1988
- resolve(false);
1989
- }
1990
- });
1991
- }
1992
- else {
1993
- resolve(true);
1994
- }
1995
- });
1996
- }
1997
- async function validate_group(validationGroup) {
1998
- if (!validationGroup) {
1999
- return firstValueFrom(of(true));
2000
- }
2001
- const top = validationGroup.element.nativeElement;
2002
- let sourceNode;
2003
- const targetClassName = 'dx-field';
2004
- const findTargetNode = (node) => {
2005
- sourceNode = node;
2006
- while (true) {
2007
- if (node.classList.contains(targetClassName)) {
2008
- return node;
2009
- }
2010
- else {
2011
- node = node.parentElement;
2012
- if (node === top) {
2013
- return sourceNode;
2014
- }
2015
- }
2016
- }
2017
- };
2018
- return new Promise(resolve => {
2019
- const validateResult = validationGroup.instance.validate();
2020
- if (!validateResult.isValid) {
2021
- const brokenElement = (validateResult.brokenRules?.[0]).validator.element();
2022
- findTargetNode(brokenElement).scrollIntoView();
2023
- resolve(false);
2024
- }
2025
- if (validateResult.status === 'pending') {
2026
- validateResult.complete?.then((result) => {
2027
- if (result.isValid) {
2028
- resolve(true);
2029
- }
2030
- else {
2031
- const brokenElement = (result.brokenRules?.[0]).validator.element();
2032
- findTargetNode(brokenElement).scrollIntoView();
2033
- resolve(false);
2034
- }
2035
- });
2036
- }
2037
- else {
2038
- resolve(true);
2039
- }
2040
- });
2041
- }
2042
-
2043
2063
  class CustomTemplateDirective {
2044
2064
  constructor(templateRef) {
2045
2065
  this.templateRef = templateRef;
@@ -2101,7 +2121,6 @@ class DataGridFactory {
2101
2121
  caption: field.caption,
2102
2122
  dataType: 'string',
2103
2123
  alignment: 'left',
2104
- cssClass: 'cell-vertical-middle',
2105
2124
  allowHeaderFiltering: true,
2106
2125
  allowFiltering: true,
2107
2126
  allowSorting: true,
@@ -2214,18 +2233,6 @@ class DataGridFactory {
2214
2233
  };
2215
2234
  if (field.config.constraint.multiple) {
2216
2235
  column.allowFiltering = false;
2217
- column.lookup = {
2218
- dataSource: {
2219
- store: new CustomStore({
2220
- load: () => {
2221
- return lastValueFrom(this.service.getUserColumnDataSource(tenant, className, view, field.name));
2222
- }
2223
- }),
2224
- paginate: true
2225
- },
2226
- valueExpr: 'value',
2227
- displayExpr: 'text'
2228
- };
2229
2236
  column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
2230
2237
  if (this.defaultCalculateFilterExpression) {
2231
2238
  if (!filterValue) {
@@ -2270,18 +2277,6 @@ class DataGridFactory {
2270
2277
  };
2271
2278
  if (field.config.constraint.multiple) {
2272
2279
  column.allowFiltering = false;
2273
- column.lookup = {
2274
- dataSource: {
2275
- store: new CustomStore({
2276
- load: () => {
2277
- return lastValueFrom(this.service.getUnitColumnDataSource(tenant, className, view, field.name));
2278
- }
2279
- }),
2280
- paginate: true
2281
- },
2282
- valueExpr: 'value',
2283
- displayExpr: 'text'
2284
- };
2285
2280
  column.calculateFilterExpression = function (filterValue, selectedFilterOperation, target) {
2286
2281
  if (this.defaultCalculateFilterExpression) {
2287
2282
  if (!filterValue) {
@@ -2322,7 +2317,7 @@ class DataGridFactory {
2322
2317
  dataSource: {
2323
2318
  store: new CustomStore({
2324
2319
  load: () => {
2325
- return lastValueFrom(this.service.getConstraintEntries(field.config.constraint.name));
2320
+ return lastValueFrom(this.service.getConstraintEntries(tenant, field.config.constraint.name));
2326
2321
  }
2327
2322
  }),
2328
2323
  paginate: true
@@ -2576,7 +2571,9 @@ class FormComponent {
2576
2571
  oid: this.oid,
2577
2572
  copyOid: this.copyOid,
2578
2573
  template: this.template
2579
- }
2574
+ },
2575
+ __model: this.model,
2576
+ __opener: this
2580
2577
  });
2581
2578
  this.service.getFormTemplateConfig(this.tenant, this.className, this.template).subscribe(response => {
2582
2579
  this.config = response.data.template;
@@ -2650,10 +2647,10 @@ class FormComponent {
2650
2647
  }
2651
2648
  }
2652
2649
  FormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FormComponent, deps: [{ token: i0.ViewContainerRef }, { token: FormService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
2653
- FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FormComponent, selector: "rs-form", inputs: { tenant: "tenant", className: "className", oid: "oid", copyOid: "copyOid", template: "template", extraAttrMap: "extraAttrMap", opener: "opener", params: "params", tabViewContainerRef: "tabViewContainerRef", onlyFrontEnd: "onlyFrontEnd", model: "model", readonly: "readonly" }, outputs: { onDataLoaded: "onDataLoaded", submitCallback: "submitCallback" }, providers: [FormService], viewQueries: [{ propertyName: "validator", first: true, predicate: DxValidationGroupComponent, descendants: true }, { propertyName: "formSubmitter", first: true, predicate: ["formSubmitter"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\r\n [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<dx-validation-group *ngIf=\"!loading\">\r\n <rs-box-container [config]=\"config\"\r\n [model]=\"model\"\r\n [opener]=\"this\"\r\n [params]=\"params\"\r\n [tabViewContainerRef]=\"tabViewContainerRef\"\r\n [readonly]=\"readonly\"></rs-box-container>\r\n <dx-text-box height=\"0\" style=\"border: none;\">\r\n <dx-validator>\r\n <dxi-validation-rule *ngIf=\"extraValidator\" type=\"async\"\r\n [validationCallback]=\"extraValidate\"></dxi-validation-rule>\r\n </dx-validator>\r\n </dx-text-box>\r\n <div *ngIf=\"extraValidateMessage\" class=\"dx-field\">\r\n <div class=\"dx-field-value\">\r\n <div class=\"dx-toast-error dx-toast-content\">\r\n <div class=\"dx-toast-message\">{{ extraValidateMessage }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <dx-button #formSubmitter [visible]=\"false\" (onClick)=\"submitForm()\"></dx-button>\r\n</dx-validation-group>\r\n", styles: [":host{padding:12px 24px 20px}:host dx-validation-group{display:flex;flex-flow:column nowrap}:host dx-validation-group .dx-field{top:16px}:host dx-validation-group .dx-field .dx-field-value .dx-toast-content{padding:4px 8px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BoxContainerComponent, selector: "rs-box-container", inputs: ["id", "editMode", "config", "model", "opener", "params", "readonly", "tabId", "tabViewContainerRef"] }, { kind: "component", type: i6.DxoPositionComponent, selector: "dxo-position", inputs: ["at", "boundary", "boundaryOffset", "collision", "my", "of", "offset"] }, { kind: "component", type: i3.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i6.DxiValidationRuleComponent, selector: "dxi-validation-rule", inputs: ["message", "trim", "type", "ignoreEmptyValue", "max", "min", "reevaluate", "validationCallback", "comparisonTarget", "comparisonType", "pattern"] }, { kind: "component", type: i6$1.DxLoadPanelComponent, selector: "dx-load-panel", inputs: ["animation", "closeOnOutsideClick", "container", "copyRootClassesToWrapper", "deferRendering", "delay", "elementAttr", "focusStateEnabled", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "indicatorSrc", "maxHeight", "maxWidth", "message", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showIndicator", "showPane", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "delayChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "indicatorSrcChange", "maxHeightChange", "maxWidthChange", "messageChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showIndicatorChange", "showPaneChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i7.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxValidationGroupComponent, selector: "dx-validation-group", inputs: ["elementAttr", "height", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "elementAttrChange", "heightChange", "widthChange"] }, { kind: "component", type: i9.DxValidatorComponent, selector: "dx-validator", inputs: ["adapter", "elementAttr", "height", "name", "validationGroup", "validationRules", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onValidated", "adapterChange", "elementAttrChange", "heightChange", "nameChange", "validationGroupChange", "validationRulesChange", "widthChange"] }] });
2650
+ FormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: FormComponent, selector: "rs-form", inputs: { tenant: "tenant", className: "className", oid: "oid", copyOid: "copyOid", template: "template", extraAttrMap: "extraAttrMap", opener: "opener", params: "params", tabViewContainerRef: "tabViewContainerRef", onlyFrontEnd: "onlyFrontEnd", model: "model", readonly: "readonly" }, outputs: { onDataLoaded: "onDataLoaded", submitCallback: "submitCallback" }, providers: [FormService], viewQueries: [{ propertyName: "validator", first: true, predicate: DxValidationGroupComponent, descendants: true }, { propertyName: "formSubmitter", first: true, predicate: ["formSubmitter"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\r\n [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<dx-validation-group *ngIf=\"!loading\">\r\n <rs-box-container [config]=\"config\"\r\n [params]=\"params\"\r\n [tabViewContainerRef]=\"tabViewContainerRef\"\r\n [readonly]=\"readonly\"></rs-box-container>\r\n <dx-text-box height=\"0\" style=\"border: none;\">\r\n <dx-validator>\r\n <dxi-validation-rule *ngIf=\"extraValidator\" type=\"async\"\r\n [validationCallback]=\"extraValidate\"></dxi-validation-rule>\r\n </dx-validator>\r\n </dx-text-box>\r\n <div *ngIf=\"extraValidateMessage\" class=\"dx-field\">\r\n <div class=\"dx-field-value\">\r\n <div class=\"dx-toast-error dx-toast-content\">\r\n <div class=\"dx-toast-message\">{{ extraValidateMessage }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <dx-button #formSubmitter [visible]=\"false\" (onClick)=\"submitForm()\"></dx-button>\r\n</dx-validation-group>\r\n", styles: [":host{padding:12px 24px 20px}:host dx-validation-group{display:flex;flex-flow:column nowrap}:host dx-validation-group .dx-field{top:16px}:host dx-validation-group .dx-field .dx-field-value .dx-toast-content{padding:4px 8px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BoxContainerComponent, selector: "rs-box-container", inputs: ["id", "editMode", "config", "params", "readonly", "tabViewContainerRef"] }, { kind: "component", type: i6.DxoPositionComponent, selector: "dxo-position", inputs: ["at", "boundary", "boundaryOffset", "collision", "my", "of", "offset"] }, { kind: "component", type: i3.DxButtonComponent, selector: "dx-button", inputs: ["accessKey", "activeStateEnabled", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "icon", "rtlEnabled", "stylingMode", "tabIndex", "template", "text", "type", "useSubmitBehavior", "validationGroup", "visible", "width"], outputs: ["onClick", "onContentReady", "onDisposing", "onInitialized", "onOptionChanged", "accessKeyChange", "activeStateEnabledChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "iconChange", "rtlEnabledChange", "stylingModeChange", "tabIndexChange", "templateChange", "textChange", "typeChange", "useSubmitBehaviorChange", "validationGroupChange", "visibleChange", "widthChange"] }, { kind: "component", type: i6.DxiValidationRuleComponent, selector: "dxi-validation-rule", inputs: ["message", "trim", "type", "ignoreEmptyValue", "max", "min", "reevaluate", "validationCallback", "comparisonTarget", "comparisonType", "pattern"] }, { kind: "component", type: i6$1.DxLoadPanelComponent, selector: "dx-load-panel", inputs: ["animation", "closeOnOutsideClick", "container", "copyRootClassesToWrapper", "deferRendering", "delay", "elementAttr", "focusStateEnabled", "height", "hideOnOutsideClick", "hideOnParentScroll", "hint", "hoverStateEnabled", "indicatorSrc", "maxHeight", "maxWidth", "message", "minHeight", "minWidth", "position", "rtlEnabled", "shading", "shadingColor", "showIndicator", "showPane", "visible", "width", "wrapperAttr"], outputs: ["onContentReady", "onDisposing", "onHidden", "onHiding", "onInitialized", "onOptionChanged", "onShowing", "onShown", "animationChange", "closeOnOutsideClickChange", "containerChange", "copyRootClassesToWrapperChange", "deferRenderingChange", "delayChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hideOnOutsideClickChange", "hideOnParentScrollChange", "hintChange", "hoverStateEnabledChange", "indicatorSrcChange", "maxHeightChange", "maxWidthChange", "messageChange", "minHeightChange", "minWidthChange", "positionChange", "rtlEnabledChange", "shadingChange", "shadingColorChange", "showIndicatorChange", "showPaneChange", "visibleChange", "widthChange", "wrapperAttrChange"] }, { kind: "component", type: i7.DxTextBoxComponent, selector: "dx-text-box", inputs: ["accessKey", "activeStateEnabled", "buttons", "disabled", "elementAttr", "focusStateEnabled", "height", "hint", "hoverStateEnabled", "inputAttr", "isValid", "label", "labelMode", "mask", "maskChar", "maskInvalidMessage", "maskRules", "maxLength", "mode", "name", "placeholder", "readOnly", "rtlEnabled", "showClearButton", "showMaskMode", "spellcheck", "stylingMode", "tabIndex", "text", "useMaskedValue", "validationError", "validationErrors", "validationMessageMode", "validationMessagePosition", "validationStatus", "value", "valueChangeEvent", "visible", "width"], outputs: ["onChange", "onContentReady", "onCopy", "onCut", "onDisposing", "onEnterKey", "onFocusIn", "onFocusOut", "onInitialized", "onInput", "onKeyDown", "onKeyUp", "onOptionChanged", "onPaste", "onValueChanged", "accessKeyChange", "activeStateEnabledChange", "buttonsChange", "disabledChange", "elementAttrChange", "focusStateEnabledChange", "heightChange", "hintChange", "hoverStateEnabledChange", "inputAttrChange", "isValidChange", "labelChange", "labelModeChange", "maskChange", "maskCharChange", "maskInvalidMessageChange", "maskRulesChange", "maxLengthChange", "modeChange", "nameChange", "placeholderChange", "readOnlyChange", "rtlEnabledChange", "showClearButtonChange", "showMaskModeChange", "spellcheckChange", "stylingModeChange", "tabIndexChange", "textChange", "useMaskedValueChange", "validationErrorChange", "validationErrorsChange", "validationMessageModeChange", "validationMessagePositionChange", "validationStatusChange", "valueChange", "valueChangeEventChange", "visibleChange", "widthChange", "onBlur"] }, { kind: "component", type: i8.DxValidationGroupComponent, selector: "dx-validation-group", inputs: ["elementAttr", "height", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "elementAttrChange", "heightChange", "widthChange"] }, { kind: "component", type: i9.DxValidatorComponent, selector: "dx-validator", inputs: ["adapter", "elementAttr", "height", "name", "validationGroup", "validationRules", "width"], outputs: ["onDisposing", "onInitialized", "onOptionChanged", "onValidated", "adapterChange", "elementAttrChange", "heightChange", "nameChange", "validationGroupChange", "validationRulesChange", "widthChange"] }] });
2654
2651
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FormComponent, decorators: [{
2655
2652
  type: Component,
2656
- args: [{ selector: 'rs-form', providers: [FormService], template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\r\n [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<dx-validation-group *ngIf=\"!loading\">\r\n <rs-box-container [config]=\"config\"\r\n [model]=\"model\"\r\n [opener]=\"this\"\r\n [params]=\"params\"\r\n [tabViewContainerRef]=\"tabViewContainerRef\"\r\n [readonly]=\"readonly\"></rs-box-container>\r\n <dx-text-box height=\"0\" style=\"border: none;\">\r\n <dx-validator>\r\n <dxi-validation-rule *ngIf=\"extraValidator\" type=\"async\"\r\n [validationCallback]=\"extraValidate\"></dxi-validation-rule>\r\n </dx-validator>\r\n </dx-text-box>\r\n <div *ngIf=\"extraValidateMessage\" class=\"dx-field\">\r\n <div class=\"dx-field-value\">\r\n <div class=\"dx-toast-error dx-toast-content\">\r\n <div class=\"dx-toast-message\">{{ extraValidateMessage }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <dx-button #formSubmitter [visible]=\"false\" (onClick)=\"submitForm()\"></dx-button>\r\n</dx-validation-group>\r\n", styles: [":host{padding:12px 24px 20px}:host dx-validation-group{display:flex;flex-flow:column nowrap}:host dx-validation-group .dx-field{top:16px}:host dx-validation-group .dx-field .dx-field-value .dx-toast-content{padding:4px 8px}\n"] }]
2653
+ args: [{ selector: 'rs-form', providers: [FormService], template: "<dx-load-panel [container]=\"viewContainerRef.element.nativeElement\" [showPane]=\"false\"\r\n [visible]=\"loading\">\r\n <dxo-position [of]=\"viewContainerRef.element.nativeElement\"></dxo-position>\r\n</dx-load-panel>\r\n<dx-validation-group *ngIf=\"!loading\">\r\n <rs-box-container [config]=\"config\"\r\n [params]=\"params\"\r\n [tabViewContainerRef]=\"tabViewContainerRef\"\r\n [readonly]=\"readonly\"></rs-box-container>\r\n <dx-text-box height=\"0\" style=\"border: none;\">\r\n <dx-validator>\r\n <dxi-validation-rule *ngIf=\"extraValidator\" type=\"async\"\r\n [validationCallback]=\"extraValidate\"></dxi-validation-rule>\r\n </dx-validator>\r\n </dx-text-box>\r\n <div *ngIf=\"extraValidateMessage\" class=\"dx-field\">\r\n <div class=\"dx-field-value\">\r\n <div class=\"dx-toast-error dx-toast-content\">\r\n <div class=\"dx-toast-message\">{{ extraValidateMessage }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <dx-button #formSubmitter [visible]=\"false\" (onClick)=\"submitForm()\"></dx-button>\r\n</dx-validation-group>\r\n", styles: [":host{padding:12px 24px 20px}:host dx-validation-group{display:flex;flex-flow:column nowrap}:host dx-validation-group .dx-field{top:16px}:host dx-validation-group .dx-field .dx-field-value .dx-toast-content{padding:4px 8px}\n"] }]
2657
2654
  }], ctorParameters: function () { return [{ type: i0.ViewContainerRef }, { type: FormService }, { type: i0.ElementRef }]; }, propDecorators: { tenant: [{
2658
2655
  type: Input
2659
2656
  }], className: [{
@@ -2867,7 +2864,9 @@ class CellComponentTemplateComponent {
2867
2864
  const instance = componentRef.instance;
2868
2865
  Object.assign(instance, cellComponentConfig);
2869
2866
  if (!(instance instanceof CellComponentBase)) {
2870
- console.warn('cell component need extending CellComponentBase, name: ' + plugin.name);
2867
+ console.error('cell component need extending CellComponentBase, name: ' + plugin.name);
2868
+ notify_error('加载单元格组件配置失败:' + plugin.name);
2869
+ return;
2871
2870
  }
2872
2871
  instance.field = this.cellInfo.column.dataField;
2873
2872
  instance.fieldConfig = fieldConfig;
@@ -2930,22 +2929,20 @@ class DataGridComponent {
2930
2929
  }
2931
2930
  if (this.instanceLinkType === 'tab' || this.instanceLinkType === 'drawer') {
2932
2931
  columns.unshift({
2933
- fixed: true,
2934
2932
  caption: '详情',
2933
+ fixed: true,
2935
2934
  width: 48,
2936
- cellTemplate: 'instanceLinkTemplate',
2937
2935
  alignment: 'center',
2938
- cssClass: 'cell-vertical-middle'
2936
+ cellTemplate: 'instanceLinkTemplate'
2939
2937
  });
2940
2938
  }
2941
2939
  if (this.showRowNum) {
2942
2940
  columns.unshift({
2943
- fixed: true,
2944
2941
  caption: '行号',
2942
+ fixed: true,
2945
2943
  width: 48,
2946
- cellTemplate: 'rowIndexTemplate',
2947
2944
  alignment: 'center',
2948
- cssClass: 'cell-vertical-middle'
2945
+ cellTemplate: 'rowIndexTemplate'
2949
2946
  });
2950
2947
  }
2951
2948
  this.columns = columns;
@@ -2959,20 +2956,6 @@ class DataGridComponent {
2959
2956
  this.dataSource = this.factory.makeDataGridDataSource(this.tenant, this.className, this.view, this.filter, this.keyExpr, this.dataGridName);
2960
2957
  }
2961
2958
  }
2962
- getOriginalValue(cellInfo, key) {
2963
- const config = cellInfo.column[key];
2964
- if (config) {
2965
- const value = cellInfo.data[config.field];
2966
- if (value) {
2967
- if (Array.isArray(value)) {
2968
- return value;
2969
- }
2970
- return [value];
2971
- }
2972
- return [];
2973
- }
2974
- return cellInfo.data[key];
2975
- }
2976
2959
  getSelectedRowKeys() {
2977
2960
  return this.dxDataGrid.instance.getSelectedRowKeys();
2978
2961
  }