@colijnit/corecomponents_v12 300.1.3 → 300.1.5

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.
@@ -9346,7 +9346,10 @@ class InputNumberPickerComponent extends BaseInputComponent {
9346
9346
  }
9347
9347
  handleInputKeyDown(event) {
9348
9348
  // event.preventDefault();
9349
- if (event.code === 'Enter' || event.code === 'NumpadEnter') {
9349
+ if (this.readonly) {
9350
+ return false;
9351
+ }
9352
+ if ((event.code === 'Enter' || event.code === 'NumpadEnter')) {
9350
9353
  this.modelChange.next(this.model);
9351
9354
  return false;
9352
9355
  }
@@ -11939,35 +11942,17 @@ class SimpleGridCellComponent {
11939
11942
  _changeDetector;
11940
11943
  _injector;
11941
11944
  _formComponent;
11942
- get editMode() {
11943
- return this._editMode;
11944
- }
11945
- set editMode(value) {
11946
- this._editMode = value;
11947
- }
11945
+ editMode;
11948
11946
  defaultTextAlign = ColumnAlign.Left;
11949
- set editTemplateContent(template) {
11950
- if (template) {
11951
- this._editTemplate = template;
11952
- this._setFocusComponent();
11953
- }
11954
- }
11955
- set noEditTemplateContent(template) {
11956
- if (template) {
11957
- this._template = template;
11958
- this._setFocusComponent();
11959
- }
11960
- }
11961
- set noTemplateContent(template) {
11962
- if (template) {
11963
- this._inputTemplate = template;
11947
+ set cellFieldContent(element) {
11948
+ if (element) {
11949
+ this._cellField = element;
11964
11950
  this._setFocusComponent();
11965
11951
  }
11966
11952
  }
11967
11953
  column;
11968
11954
  row;
11969
11955
  columnInjector;
11970
- _editMode = false;
11971
11956
  set fieldEditMode(value) {
11972
11957
  this._fieldEditMode = value;
11973
11958
  this._setFocusComponent();
@@ -11986,9 +11971,7 @@ class SimpleGridCellComponent {
11986
11971
  }
11987
11972
  _fieldEditMode = false;
11988
11973
  _focused = false;
11989
- _editTemplate;
11990
- _template;
11991
- _inputTemplate;
11974
+ _cellField;
11992
11975
  constructor(_changeDetector, _injector, _formComponent) {
11993
11976
  this._changeDetector = _changeDetector;
11994
11977
  this._injector = _injector;
@@ -12003,7 +11986,7 @@ class SimpleGridCellComponent {
12003
11986
  });
12004
11987
  }
12005
11988
  _setFocusComponent() {
12006
- if (this._editMode && this.fieldEditMode) {
11989
+ if (this.editMode && this.fieldEditMode) {
12007
11990
  const element = this._getElement();
12008
11991
  if (element) {
12009
11992
  const focusEvent = this._createNewEvent(element, 'focus');
@@ -12047,22 +12030,10 @@ class SimpleGridCellComponent {
12047
12030
  return event;
12048
12031
  }
12049
12032
  _getElement() {
12050
- let templ;
12051
- if (this._editTemplate) {
12052
- templ = this._editTemplate;
12053
- }
12054
- else if (this._template) {
12055
- templ = this._template;
12056
- }
12057
- else {
12058
- templ = this._inputTemplate;
12059
- }
12060
- if (templ) {
12061
- if (templ && templ.elementRef) {
12062
- const inputElement = this._getFirstFormInput(templ.elementRef.nativeElement.parentElement);
12063
- if (inputElement) {
12064
- return inputElement;
12065
- }
12033
+ if (this._cellField && this._cellField.nativeElement) {
12034
+ const inputElement = this._getFirstFormInput(this._cellField.nativeElement);
12035
+ if (inputElement) {
12036
+ return inputElement;
12066
12037
  }
12067
12038
  }
12068
12039
  }
@@ -12070,12 +12041,12 @@ class SimpleGridCellComponent {
12070
12041
  this._changeDetector.detectChanges();
12071
12042
  }
12072
12043
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: SimpleGridCellComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: FormComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
12073
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SimpleGridCellComponent, isStandalone: false, selector: "co-simple-grid-cell", inputs: { editMode: "editMode", column: "column", row: "row", fieldEditMode: "fieldEditMode" }, outputs: { cellClick: "cellClick" }, host: { listeners: { "click": "handleClick($event)" }, properties: { "class.co-simple-grid-cell": "this.showClass" } }, viewQueries: [{ propertyName: "editTemplateContent", first: true, predicate: ["editTemplate"], descendants: true, read: BaseInputComponent }, { propertyName: "noEditTemplateContent", first: true, predicate: ["noEditTemplate"], descendants: true }, { propertyName: "noTemplateContent", first: true, predicate: ["noTemplate"], descendants: true }], ngImport: i0, template: `
12044
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: SimpleGridCellComponent, isStandalone: false, selector: "co-simple-grid-cell", inputs: { editMode: "editMode", column: "column", row: "row", fieldEditMode: "fieldEditMode" }, outputs: { cellClick: "cellClick" }, host: { listeners: { "click": "handleClick($event)" }, properties: { "class.co-simple-grid-cell": "this.showClass" } }, viewQueries: [{ propertyName: "cellFieldContent", first: true, predicate: ["cellField"], descendants: true }], ngImport: i0, template: `
12074
12045
  <div class="simple-grid-column-cell-value" [ngClass]="column.textAlign ? column.textAlign : defaultTextAlign">
12075
12046
  @if (editMode) {
12076
- <div class="simple-grid-column-cell-field">
12047
+ <div #cellField class="simple-grid-column-cell-field">
12077
12048
  @if (column.editTemplate) {
12078
- <ng-container #editTemplate
12049
+ <ng-container
12079
12050
  [ngTemplateOutlet]="column.editTemplate"
12080
12051
  [ngTemplateOutletInjector]="columnInjector"
12081
12052
  [ngTemplateOutletContext]="{value: row[column.field], row: row}"></ng-container>
@@ -12089,7 +12060,7 @@ class SimpleGridCellComponent {
12089
12060
  }
12090
12061
  </div>
12091
12062
  } @else {
12092
- <div class="simple-grid-column-cell-field">
12063
+ <div #cellField class="simple-grid-column-cell-field">
12093
12064
  @if (column.template) {
12094
12065
  <ng-container [ngTemplateOutlet]="column.template"
12095
12066
  [ngTemplateOutletContext]="{value: row[column.field], row: row}"></ng-container>
@@ -12108,9 +12079,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12108
12079
  template: `
12109
12080
  <div class="simple-grid-column-cell-value" [ngClass]="column.textAlign ? column.textAlign : defaultTextAlign">
12110
12081
  @if (editMode) {
12111
- <div class="simple-grid-column-cell-field">
12082
+ <div #cellField class="simple-grid-column-cell-field">
12112
12083
  @if (column.editTemplate) {
12113
- <ng-container #editTemplate
12084
+ <ng-container
12114
12085
  [ngTemplateOutlet]="column.editTemplate"
12115
12086
  [ngTemplateOutletInjector]="columnInjector"
12116
12087
  [ngTemplateOutletContext]="{value: row[column.field], row: row}"></ng-container>
@@ -12124,7 +12095,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12124
12095
  }
12125
12096
  </div>
12126
12097
  } @else {
12127
- <div class="simple-grid-column-cell-field">
12098
+ <div #cellField class="simple-grid-column-cell-field">
12128
12099
  @if (column.template) {
12129
12100
  <ng-container [ngTemplateOutlet]="column.template"
12130
12101
  [ngTemplateOutletContext]="{value: row[column.field], row: row}"></ng-container>
@@ -12142,15 +12113,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
12142
12113
  type: Optional
12143
12114
  }] }], propDecorators: { editMode: [{
12144
12115
  type: Input
12145
- }], editTemplateContent: [{
12146
- type: ViewChild,
12147
- args: ["editTemplate", { read: BaseInputComponent }]
12148
- }], noEditTemplateContent: [{
12149
- type: ViewChild,
12150
- args: ["noEditTemplate"]
12151
- }], noTemplateContent: [{
12116
+ }], cellFieldContent: [{
12152
12117
  type: ViewChild,
12153
- args: ["noTemplate"]
12118
+ args: ["cellField"]
12154
12119
  }], column: [{
12155
12120
  type: Input
12156
12121
  }], row: [{
@@ -12275,9 +12240,11 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
12275
12240
  defaultTextAlign = ColumnAlign.Left;
12276
12241
  scrollDirections = ScrollDirection;
12277
12242
  set headerCells(cells) {
12243
+ // The header cells are rendered from headerColumnsCopy, so the elementRefs
12244
+ // have to be handed back to that same collection.
12278
12245
  const headerElements = cells.toArray();
12279
- for (let i = 0; i < headerElements.length; i++) {
12280
- this.columns[i].elementRef = headerElements[i];
12246
+ for (let i = 0; i < headerElements.length && i < this.headerColumnsCopy.length; i++) {
12247
+ this.headerColumnsCopy[i].elementRef = headerElements[i];
12281
12248
  }
12282
12249
  }
12283
12250
  rowElements;
@@ -12312,8 +12279,11 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
12312
12279
  .then((index) => {
12313
12280
  this.editCellIndex = index;
12314
12281
  this.changeDetection.markForCheck();
12282
+ this._detectChanges();
12283
+ })
12284
+ .catch(() => {
12285
+ // row change was blocked by validation, keep the current cell in edit mode
12315
12286
  });
12316
- this._detectChanges();
12317
12287
  }
12318
12288
  if (event.code === 'Escape') {
12319
12289
  this.cancelEditRow();
@@ -12716,6 +12686,9 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
12716
12686
  }, 500);
12717
12687
  }
12718
12688
  /**
12689
+ * Cell indexes are expressed in `headerColumnsCopy` space, because that is the
12690
+ * collection the rows are rendered from. Using `columns` here would drift as soon
12691
+ * as a column is hidden or marked as single column.
12719
12692
  *
12720
12693
  * @param next; Move to next or previous cell
12721
12694
  * @param start; Start from cellindex
@@ -12723,9 +12696,16 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
12723
12696
  */
12724
12697
  _nextAvailableCellToEdit(next, start = -1) {
12725
12698
  return new Promise((resolve, reject) => {
12726
- const numEditableColumns = this.columns.filter(c => !c.readonly).length;
12727
12699
  const wantedIndex = start + (next ? 1 : -1);
12728
- if (wantedIndex >= numEditableColumns) {
12700
+ const cellIndex = next
12701
+ ? this._getNextEditCellIndex(Math.max(wantedIndex, 0))
12702
+ : this._getPreviousEditCellIndex(wantedIndex);
12703
+ // Still an editable column left in the current row
12704
+ if (cellIndex > -1) {
12705
+ resolve(cellIndex);
12706
+ return;
12707
+ }
12708
+ if (next) {
12729
12709
  this._getNextEditRowIndex()
12730
12710
  .then((index) => {
12731
12711
  this.editRowIndex = index;
@@ -12735,34 +12715,37 @@ class SimpleGridComponent extends BaseSimpleGridComponent {
12735
12715
  reject();
12736
12716
  });
12737
12717
  }
12738
- else if (wantedIndex < 0) {
12718
+ else {
12739
12719
  this._getPreviousEditRowIndex()
12740
12720
  .then((index) => {
12741
12721
  this.editRowIndex = index;
12742
- resolve(this._getPreviousEditCellIndex(this.columns.length - 1));
12722
+ resolve(this._getPreviousEditCellIndex(this.headerColumnsCopy.length - 1));
12743
12723
  })
12744
12724
  .catch((e) => {
12745
12725
  reject();
12746
12726
  });
12747
12727
  }
12748
- else {
12749
- resolve(next ? this._getNextEditCellIndex(start + 1) : this._getPreviousEditCellIndex(start - 1));
12750
- }
12751
12728
  });
12752
12729
  }
12753
12730
  _getNextEditCellIndex(start) {
12754
- for (let i = start; i < this.columns.length; i++) {
12755
- if (!this.columns[i].readonly) {
12731
+ for (let i = start; i < this.headerColumnsCopy.length; i++) {
12732
+ if (this._isCellEditable(i)) {
12756
12733
  return i;
12757
12734
  }
12758
12735
  }
12736
+ return -1;
12759
12737
  }
12760
12738
  _getPreviousEditCellIndex(start) {
12761
- for (let i = start; i >= 0; i--) {
12762
- if (!this.columns[i].readonly) {
12739
+ for (let i = Math.min(start, this.headerColumnsCopy.length - 1); i >= 0; i--) {
12740
+ if (this._isCellEditable(i)) {
12763
12741
  return i;
12764
12742
  }
12765
12743
  }
12744
+ return -1;
12745
+ }
12746
+ _isCellEditable(cellIndex) {
12747
+ const column = this.headerColumnsCopy[cellIndex];
12748
+ return !!column && !column.readonly;
12766
12749
  }
12767
12750
  _getNextEditRowIndex() {
12768
12751
  return new Promise((resolve, reject) => {