@myrtex-org/form 1.1.73 → 1.1.74

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.
@@ -1,5 +1,4 @@
1
1
  import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';
2
- import { isArray } from 'lodash-es';
3
2
  import { ButtonModule, MODAL_DATA, ModalModule, ModalServiceComponent } from '@myrtex-org/ui';
4
3
  import { FormDispenserModal } from './form-dispenser-modal/form-dispenser-modal.component';
5
4
  import { provideNgxMask } from 'ngx-mask';
@@ -28,19 +27,44 @@ export class InputTableModalComponent extends ModalServiceComponent {
28
27
  console.group('=== МОДАЛКА: Изменение значения в форме ===');
29
28
  console.log('Что пришло из FormDispenser (valueModel):', structuredClone(valueModel));
30
29
  console.log('Текущий rowModel.data ДО трансформации:', structuredClone(this.rowModel.data));
31
- if (isArray(valueModel)) {
32
- valueModel.forEach(model => {
33
- this._transformValues(model);
34
- });
35
- }
36
- else {
37
- this._transformValues(valueModel);
38
- }
30
+ // 1. Приводим всё к единому массиву, чтобы не дублировать логику
31
+ const incomingModels = Array.isArray(valueModel) ? valueModel : [valueModel];
32
+ // 2. Группируем пришедшие объекты по их sysName
33
+ const groups = {};
34
+ incomingModels.forEach(model => {
35
+ if (!groups[model.sysName]) {
36
+ groups[model.sysName] = [];
37
+ }
38
+ groups[model.sysName].push(model);
39
+ });
40
+ // 3. Пробегаемся по сгруппированным данным и вызываем трансформацию
41
+ Object.keys(groups).forEach(sysName => {
42
+ const modelsGroup = groups[sysName];
43
+ if (modelsGroup.length > 1) {
44
+ // Найдено несколько объектов с одинаковым sysName (наш Range дат!)
45
+ // Собираем их значения (value) в один массив строк
46
+ const combinedRangeValue = modelsGroup.map(m => m.value);
47
+ // Создаем один виртуальный ComponentValueModel, где в value лежит массив строк
48
+ const rangeModelClone = {
49
+ ...modelsGroup[0],
50
+ value: combinedRangeValue
51
+ };
52
+ this._transformValues(rangeModelClone);
53
+ }
54
+ else {
55
+ // Обычный одиночный компонент (текст, свитч, или одиночная дата)
56
+ this._transformValues(modelsGroup[0]);
57
+ }
58
+ });
39
59
  this._recalculateFormulaFields();
40
60
  console.log('Итоговый rowModel.data ПОСЛЕ трансформации и формул:', structuredClone(this.rowModel.data));
41
61
  this.emptyRow = this.rowModel.data.every(x => this.isEmpty(x.value, x.valueType));
42
62
  console.log('Статус emptyRow:', this.emptyRow);
43
63
  console.groupEnd();
64
+ console.log('Итоговый rowModel.data ПОСЛЕ трансформации и формул:', structuredClone(this.rowModel.data));
65
+ this.emptyRow = this.rowModel.data.every(x => this.isEmpty(x.value, x.valueType));
66
+ console.log('Статус emptyRow:', this.emptyRow);
67
+ console.groupEnd();
44
68
  }
45
69
  ok() {
46
70
  console.group('=== МОДАЛКА: Нажата кнопка ОК ===');
@@ -164,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
164
188
  type: Inject,
165
189
  args: [MODAL_DATA]
166
190
  }] }] });
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvY29tcG9uZW50cy9pbnB1dC10YWJsZS1tb2RhbC9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vY29tcG9uZW50cy9lbGVtZW50cy9pbnB1dC90YWJsZS9jb21wb25lbnRzL2lucHV0LXRhYmxlLW1vZGFsL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFZLHFCQUFxQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDM0YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7QUFp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O1lBQ1QsY0FBYyxFQUFFO1lBQ2hCLHVCQUF1QjtZQUN2QixnQkFBZ0IsQ0FBQyx3QkFBd0I7U0FDMUMsaURDMUNILHd4QkE4QkEseURESUksV0FBVyx3V0FDWCxZQUFZLDZVQUNaLGtCQUFrQjs7NEZBUVQsd0JBQXdCO2tCQWpCcEMsU0FBUzsrQkFDRSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixrQkFBa0I7cUJBQ25CLGFBQ1U7d0JBQ1QsY0FBYyxFQUFFO3dCQUNoQix1QkFBdUI7d0JBQ3ZCLGdCQUFnQixDQUFDLHdCQUF3QjtxQkFDMUM7OzBCQWVFLE1BQU07MkJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnbG9kYXNoLWVzJztcclxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlLCBNT0RBTF9EQVRBLCBNb2RhbE1vZHVsZSwgTW9kYWxSZWYsIE1vZGFsU2VydmljZUNvbXBvbmVudCB9IGZyb20gJ0BteXJ0ZXgtb3JnL3VpJztcclxuaW1wb3J0IHsgSW5wdXRUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2VsZW1ldHMvaW5wdXRzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VmFsdWVNb2RlbCwgVGFibGVSb3dNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IEZvcm1EaXNwZW5zZXJNb2RhbCB9IGZyb20gJy4vZm9ybS1kaXNwZW5zZXItbW9kYWwvZm9ybS1kaXNwZW5zZXItbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgcHJvdmlkZU5neE1hc2sgfSBmcm9tICduZ3gtbWFzayc7XHJcbmltcG9ydCB7IEZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLCBSZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcclxuaW1wb3J0IHsgb2JqZWN0Rm9ybUFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zdG9yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudE1vZGVsQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC1mb3JtL21vZGVscyc7XHJcbmltcG9ydCB7IENvbXBvbmVudFR5cGUsIElucHV0U3RhdGUsIFZhbHVlVHlwZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NoYXJlZC1mb3JtL2VudW1zJztcclxuaW1wb3J0IHsgSW5wdXROdW1iZXJNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL21vZGVscy9lbGVtZXRzL2lucHV0cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElucHV0VGFibGVNb2RhbFBhcmFtcyB7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBva1RleHQ6IHN0cmluZztcclxuICBzZXR0aW5nczogSW5wdXRUYWJsZU1vZGVsO1xyXG4gIHJvd01vZGVsOiBUYWJsZVJvd01vZGVsO1xyXG4gIGlzQ2hlY2tSZXF1aXJlZDogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbnB1dFRhYmxlTW9kYWxSZXN1bHQge1xyXG4gIHJlc3VsdDogYm9vbGVhbjtcclxuICByb3dNb2RlbDogVGFibGVSb3dNb2RlbDtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtaW5wdXQtdGFibGUtbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50Lmxlc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIE1vZGFsTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRm9ybURpc3BlbnNlck1vZGFsLFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBwcm92aWRlTmd4TWFzaygpLFxyXG4gICAgRm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UsXHJcbiAgICBSZWZlcmVuY2VTZXJ2aWNlIC8vINC00LvRjyDQutC+0LzQv9C+0L3QtdC90YLQsCDRgdC/0LjRgdC+0LpcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbnB1dFRhYmxlTW9kYWxDb21wb25lbnQgZXh0ZW5kcyBNb2RhbFNlcnZpY2VDb21wb25lbnQ8SW5wdXRUYWJsZU1vZGFsUGFyYW1zLCBJbnB1dFRhYmxlTW9kYWxSZXN1bHQ+IHtcclxuICBwdWJsaWMgdGl0bGUhOiBzdHJpbmc7XHJcbiAgcHVibGljIG9rVGV4dCE6IHN0cmluZztcclxuICBwdWJsaWMgc2V0dGluZ3MhOiBJbnB1dFRhYmxlTW9kZWw7XHJcbiAgcHVibGljIHJvd01vZGVsITogVGFibGVSb3dNb2RlbDtcclxuICAvLyDQl9Cw0L/QvtC80LjQvdCw0LXQvCDRgdGC0LDRgtGD0YEg0L/RgNC+0LLQtdGA0LrQuCDRhNC+0YDQvNGLINC/0YDQuCDQvtGC0LrRgNGL0YLQuNC4INC80L7QtNCw0LvQutC4XHJcbiAgcHVibGljIGlzQ2hlY2tSZXF1aXJlZCE6IGJvb2xlYW47XHJcbiAgcHVibGljIGVtcHR5Um93OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGRpYWxvZ1JlZjogTW9kYWxSZWY8SW5wdXRUYWJsZU1vZGFsUmVzdWx0PixcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxyXG4gICAgcHJpdmF0ZSBmb3JtdWxhQ2FsY3VsYXRlU2VydmljZTogRm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KE1PREFMX0RBVEEpIGRhdGE6IElucHV0VGFibGVNb2RhbFBhcmFtcyxcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gICAgdGhpcy50aXRsZSA9IGRhdGEudGl0bGU7XHJcbiAgICB0aGlzLm9rVGV4dCA9IGRhdGEub2tUZXh0XHJcbiAgICB0aGlzLnNldHRpbmdzID0gZGF0YS5zZXR0aW5ncztcclxuICAgIHRoaXMucm93TW9kZWwgPSBkYXRhLnJvd01vZGVsO1xyXG4gICAgdGhpcy5pc0NoZWNrUmVxdWlyZWQgPSBkYXRhLmlzQ2hlY2tSZXF1aXJlZDtcclxuXHJcbiAgICB0aGlzLnJlc3VsdCA9IHtyZXN1bHQ6IGZhbHNlLCByb3dNb2RlbDogdGhpcy5yb3dNb2RlbH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcG9uZW50VmFsdWVDaGFuZ2VkKHZhbHVlTW9kZWw6IENvbXBvbmVudFZhbHVlTW9kZWwgfCBDb21wb25lbnRWYWx1ZU1vZGVsW10pIHtcclxuICAgIGNvbnNvbGUuZ3JvdXAoJz09PSDQnNCe0JTQkNCb0JrQkDog0JjQt9C80LXQvdC10L3QuNC1INC30L3QsNGH0LXQvdC40Y8g0LIg0YTQvtGA0LzQtSA9PT0nKTtcclxuICAgIGNvbnNvbGUubG9nKCfQp9GC0L4g0L/RgNC40YjQu9C+INC40LcgRm9ybURpc3BlbnNlciAodmFsdWVNb2RlbCk6Jywgc3RydWN0dXJlZENsb25lKHZhbHVlTW9kZWwpKTtcclxuICAgIGNvbnNvbGUubG9nKCfQotC10LrRg9GJ0LjQuSByb3dNb2RlbC5kYXRhINCU0J4g0YLRgNCw0L3RgdGE0L7RgNC80LDRhtC40Lg6Jywgc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwuZGF0YSkpO1xyXG5cclxuICAgIGlmIChpc0FycmF5KHZhbHVlTW9kZWwpKSB7XHJcbiAgICAgIHZhbHVlTW9kZWwuZm9yRWFjaChtb2RlbCA9PiB7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtVmFsdWVzKG1vZGVsKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl90cmFuc2Zvcm1WYWx1ZXModmFsdWVNb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcmVjYWxjdWxhdGVGb3JtdWxhRmllbGRzKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coJ9CY0YLQvtCz0L7QstGL0Lkgcm93TW9kZWwuZGF0YSDQn9Ce0KHQm9CVINGC0YDQsNC90YHRhNC+0YDQvNCw0YbQuNC4INC4INGE0L7RgNC80YPQuzonLCBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbC5kYXRhKSk7XHJcbiAgICB0aGlzLmVtcHR5Um93ID0gdGhpcy5yb3dNb2RlbC5kYXRhLmV2ZXJ5KHggPT4gdGhpcy5pc0VtcHR5KHgudmFsdWUsIHgudmFsdWVUeXBlKSk7XHJcbiAgICBjb25zb2xlLmxvZygn0KHRgtCw0YLRg9GBIGVtcHR5Um93OicsIHRoaXMuZW1wdHlSb3cpO1xyXG4gICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9rKCkge1xyXG4gICAgY29uc29sZS5ncm91cCgnPT09INCc0J7QlNCQ0JvQmtCQOiDQndCw0LbQsNGC0LAg0LrQvdC+0L/QutCwINCe0JogPT09Jyk7XHJcbiAgICBjb25zb2xlLmxvZygn0KTQuNC90LDQu9GM0L3Ri9C5IHJvd01vZGVsINC/0LXRgNC10LQg0L7RgtC/0YDQsNCy0LrQvtC5INCyINGC0LDQsdC70LjRhtGDOicsIHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsKSk7XHJcbiAgICBcclxuICAgIGlmICghdGhpcy5faXNWYWxpZCgpKSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybign0JLQsNC70LjQtNCw0YbQuNGPINC80L7QtNCw0LvQutC4INCd0JUg0J/QoNCe0JnQlNCV0J3QkCcpO1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZUNoZWNrUmVxdWlyZWQoeyBpc0NoZWNrUmVxdWlyZWQ6IHRydWUgfSkpO1xyXG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygn0JLQsNC70LjQtNCw0YbQuNGPINGD0YHQv9C10YjQvdCwLiDQl9Cw0LrRgNGL0LLQsNC10Lwg0LzQvtC00LDQu9C60YMg0YEg0YDQtdC30YPQu9GM0YLQsNGC0L7QvCB0cnVlLicpO1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChvYmplY3RGb3JtQWN0aW9ucy51cGRhdGVDaGVja1JlcXVpcmVkKHsgaXNDaGVja1JlcXVpcmVkOiB0aGlzLmlzQ2hlY2tSZXF1aXJlZCB9KSk7XHJcbiAgICB0aGlzLnJlc3VsdCA9IHsgcmVzdWx0OiB0cnVlLCByb3dNb2RlbDogdGhpcy5yb3dNb2RlbCB9O1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoc3RydWN0dXJlZENsb25lKHRoaXMucmVzdWx0KSk7XHJcbiAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoKSB7XHJcbiAgICAvLyDQstC+0LfQstGA0LDRidCw0LXQvCDQv9GA0LjQt9C90LDQuiDQutCw0Log0LHRi9C7INC00L4g0L7RgtC60YDRi9GC0LjRjyDQvNC+0LTQsNC70LrQuFxyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChvYmplY3RGb3JtQWN0aW9ucy51cGRhdGVDaGVja1JlcXVpcmVkKHsgaXNDaGVja1JlcXVpcmVkOiB0aGlzLmlzQ2hlY2tSZXF1aXJlZCB9KSk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHQgPSB7cmVzdWx0OiBmYWxzZSwgcm93TW9kZWw6IHRoaXMucm93TW9kZWx9O1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5yZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNmb3JtVmFsdWVzKHZhbHVlOiBDb21wb25lbnRWYWx1ZU1vZGVsKSB7XHJcbiAgICBjb25zdCBjbG9uZVJvd01vZGVsID0gc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwpO1xyXG4gICAgY29uc3QgZmluZFZhbHVlOiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgdW5kZWZpbmVkID0gY2xvbmVSb3dNb2RlbC5kYXRhLmZpbmQoKGM6IENvbXBvbmVudFZhbHVlTW9kZWwpID0+IGMuc3lzTmFtZSA9PT0gdmFsdWUuc3lzTmFtZSk7XHJcblxyXG4gICAgaWYgKGZpbmRWYWx1ZSkge1xyXG4gICAgICBmaW5kVmFsdWUudmFsdWUgPSB2YWx1ZS52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd01vZGVsID0gY2xvbmVSb3dNb2RlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlY2FsY3VsYXRlRm9ybXVsYUZpZWxkcygpIHtcclxuICAgIGNvbnN0IGZvcm11bGFDb21wb25lbnRzID0gdGhpcy5fZ2V0Rm9ybXVsYU51bWJlckNvbXBvbmVudHModGhpcy5zZXR0aW5ncy5jb21wb25lbnRzKTtcclxuXHJcbiAgICBpZiAoIWZvcm11bGFDb21wb25lbnRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2xvbmVSb3dNb2RlbCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm11bGFDb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBoYXNVcGRhdGVzID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBmb3JtdWxhQ29tcG9uZW50cykge1xyXG4gICAgICAgIGNvbnN0IGZvcm11bGEgPSBjb21wb25lbnQub3B0aW9ucz8uZm9ybXVsYT8udHJpbSgpO1xyXG4gICAgICAgIGlmICghZm9ybXVsYSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLmNhbGN1bGF0ZU1hdGhFeHByZXNzaW9uKGZvcm11bGEsIGNsb25lUm93TW9kZWwuZGF0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gY2xvbmVSb3dNb2RlbC5kYXRhLmZpbmQoeCA9PiB4LnN5c05hbWUgPT09IGNvbXBvbmVudC5zeXNOYW1lKTtcclxuICAgICAgICBpZiAoIXRhcmdldFZhbHVlIHx8IHRhcmdldFZhbHVlLnZhbHVlID09PSByZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0VmFsdWUudmFsdWUgPSByZXN1bHQ7XHJcbiAgICAgICAgaGFzVXBkYXRlcyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaGFzVXBkYXRlcykge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yb3dNb2RlbCA9IGNsb25lUm93TW9kZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRGb3JtdWxhTnVtYmVyQ29tcG9uZW50cyhjb21wb25lbnRzOiBDb21wb25lbnRNb2RlbEJhc2VbXSk6IElucHV0TnVtYmVyTW9kZWxbXSB7XHJcbiAgICBjb25zdCByZXN1bHQ6IElucHV0TnVtYmVyTW9kZWxbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbXBvbmVudC50eXBlID09PSBDb21wb25lbnRUeXBlLklucHV0TnVtYmVyICYmXHJcbiAgICAgICAgKGNvbXBvbmVudCBhcyBJbnB1dE51bWJlck1vZGVsKS5vcHRpb25zPy5pbnB1dFN0YXRlID09PSBJbnB1dFN0YXRlLkZvcm11bGFcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goY29tcG9uZW50IGFzIElucHV0TnVtYmVyTW9kZWwpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuX2dldEZvcm11bGFOdW1iZXJDb21wb25lbnRzKGNvbXBvbmVudC5jb21wb25lbnRzKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHZhciBoYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgdmFyIHJlcXVpcmVkQ29tcG9uZW50cyA9IHRoaXMuX2dldFJlcXVpcmVkQ29tcG9uZW50cyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgcmVxdWlyZWRDb21wb25lbnRzKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yb3dNb2RlbC5kYXRhXHJcbiAgICAgICAgLmZpbmQoeCA9PiB4LnN5c05hbWUgPT0gY29tcG9uZW50LnN5c05hbWVcclxuICAgICAgICAgICAgICB8fCB4LnN5c05hbWUgPT0gYCR7Y29tcG9uZW50LnN5c05hbWV9X3N0YXJ0YFxyXG4gICAgICAgICAgICAgIHx8IHguc3lzTmFtZSA9PSBgJHtjb21wb25lbnQuc3lzTmFtZX1fZW5kYCk7XHJcbiAgICAgIGlmICghdmFsdWU/LnZhbHVlKSB7XHJcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIWhhc0Vycm9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UmVxdWlyZWRDb21wb25lbnRzKGNvbXBvbmVudHM6IENvbXBvbmVudE1vZGVsQmFzZVtdKTogQ29tcG9uZW50TW9kZWxCYXNlW117XHJcbiAgICB2YXIgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuZmlsdGVyKHggPT4geC50eXBlICE9IENvbXBvbmVudFR5cGUuR3JvdXAgJiYgISF4Lm9wdGlvbnMucmVxdWlyZWQpO1xyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cy5maWx0ZXIoeCA9PiB4LnR5cGUgPT0gQ29tcG9uZW50VHlwZS5Hcm91cCAmJiB4LmNvbXBvbmVudHMubGVuZ3RoID4gMCkpIHtcclxuICAgICAgdGhpcy5fZ2V0UmVxdWlyZWRDb21wb25lbnRzKGNvbXBvbmVudC5jb21wb25lbnRzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0VtcHR5KHZhbHVlOiBhbnksIHR5cGU6IFZhbHVlVHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGUgPT09IFZhbHVlVHlwZS5VbmRlZmluZWQpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMDtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPG1yeC1tb2RhbFxyXG4gIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgc2l6ZT1cImxhcmdlXCJcclxuICAoY2xvc2UpPVwiY2xvc2UoKVwiXHJcbiAgKG9rKT1cIm9rKClcIlxyXG4+XHJcbiAgPGFwcC1mb3JtLWRpc3BlbnNlci1tb2RhbFxyXG4gICAgW3NlY3Rpb25TZXR0aW5nc109XCJzZXR0aW5nc1wiXHJcbiAgICBbdmFsdWVzXT1cInJvd01vZGVsLmRhdGFcIlxyXG4gICAgW3ZhbHVlTW9kZV09XCInbWFudWFsJ1wiXHJcbiAgICAoY2hhbmdlZCk9XCJjb21wb25lbnRWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgPjwvYXBwLWZvcm0tZGlzcGVuc2VyLW1vZGFsPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2Zvb3RlckNvbnRlbnQ+XHJcbiAgICA8bXJ4LWJ1dHRvblxyXG4gICAgICBbY3VzdG9tQ2xhc3Nlc109XCInbXItMydcIlxyXG4gICAgICBbdHlwZV09XCInc2Vjb25kYXJ5J1wiXHJcbiAgICAgIFtzaXplXT1cIidtZWRpdW0nXCJcclxuICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxyXG4gICAgPtCe0YLQvNC10L3QsFxyXG4gICAgPC9tcngtYnV0dG9uPlxyXG4gICAgPG1yeC1idXR0b25cclxuICAgICAgW3R5cGVdPVwiJ3ByaW1hcnknXCJcclxuICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZW1wdHlSb3dcIlxyXG4gICAgICAoY2xpY2spPVwib2soKVwiXHJcbiAgICA+e3sgb2tUZXh0IH19XHJcbiAgICA8L21yeC1idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9tcngtbW9kYWw+XHJcbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdGFibGUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlydGV4LWZvcm0vc3JjL2xpYi9tb2R1bGVzL29iamVjdC1mb3JtL2NvbXBvbmVudHMvZWxlbWVudHMvaW5wdXQvdGFibGUvY29tcG9uZW50cy9pbnB1dC10YWJsZS1tb2RhbC9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9teXJ0ZXgtZm9ybS9zcmMvbGliL21vZHVsZXMvb2JqZWN0LWZvcm0vY29tcG9uZW50cy9lbGVtZW50cy9pbnB1dC90YWJsZS9jb21wb25lbnRzL2lucHV0LXRhYmxlLW1vZGFsL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBWSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7O0FBaUM5RixNQUFNLE9BQU8sd0JBQXlCLFNBQVEscUJBQW1FO0lBUy9HLFlB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S0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzsrR0F6TVUsd0JBQXdCLHNHQWF6QixVQUFVO21HQWJULHdCQUF3QixvRUFOeEI7WUFDVCxjQUFjLEVBQUU7WUFDaEIsdUJBQXVCO1lBQ3ZCLGdCQUFnQixDQUFDLHdCQUF3QjtTQUMxQyxpREMxQ0gsd3hCQThCQSx5RERJSSxXQUFXLHdXQUNYLFlBQVksNlVBQ1osa0JBQWtCOzs0RkFRVCx3QkFBd0I7a0JBakJwQyxTQUFTOytCQUNFLHVCQUF1QixtQkFHaEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxZQUFZO3dCQUNaLGtCQUFrQjtxQkFDbkIsYUFDVTt3QkFDVCxjQUFjLEVBQUU7d0JBQ2hCLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCLENBQUMsd0JBQXdCO3FCQUMxQzs7MEJBZUUsTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gtZXMnO1xyXG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUsIE1PREFMX0RBVEEsIE1vZGFsTW9kdWxlLCBNb2RhbFJlZiwgTW9kYWxTZXJ2aWNlQ29tcG9uZW50IH0gZnJvbSAnQG15cnRleC1vcmcvdWknO1xyXG5pbXBvcnQgeyBJbnB1dFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9tb2RlbHMvZWxlbWV0cy9pbnB1dHMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRWYWx1ZU1vZGVsLCBUYWJsZVJvd01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRm9ybURpc3BlbnNlck1vZGFsIH0gZnJvbSAnLi9mb3JtLWRpc3BlbnNlci1tb2RhbC9mb3JtLWRpc3BlbnNlci1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBwcm92aWRlTmd4TWFzayB9IGZyb20gJ25neC1tYXNrJztcclxuaW1wb3J0IHsgRm9ybXVsYUNhbGN1bGF0ZVNlcnZpY2UsIFJlZmVyZW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xyXG5pbXBvcnQgeyBvYmplY3RGb3JtQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3N0b3JlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TW9kZWxCYXNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vc2hhcmVkLWZvcm0vbW9kZWxzJztcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSwgSW5wdXRTdGF0ZSwgVmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vc2hhcmVkLWZvcm0vZW51bXMnO1xyXG5pbXBvcnQgeyBJbnB1dE51bWJlck1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vbW9kZWxzL2VsZW1ldHMvaW5wdXRzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRUYWJsZU1vZGFsUGFyYW1zIHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIG9rVGV4dDogc3RyaW5nO1xyXG4gIHNldHRpbmdzOiBJbnB1dFRhYmxlTW9kZWw7XHJcbiAgcm93TW9kZWw6IFRhYmxlUm93TW9kZWw7XHJcbiAgaXNDaGVja1JlcXVpcmVkOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElucHV0VGFibGVNb2RhbFJlc3VsdCB7XHJcbiAgcmVzdWx0OiBib29sZWFuO1xyXG4gIHJvd01vZGVsOiBUYWJsZVJvd01vZGVsO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1pbnB1dC10YWJsZS1tb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LXRhYmxlLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbnB1dC10YWJsZS1tb2RhbC5jb21wb25lbnQubGVzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTW9kYWxNb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBGb3JtRGlzcGVuc2VyTW9kYWwsXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHByb3ZpZGVOZ3hNYXNrKCksXHJcbiAgICBGb3JtdWxhQ2FsY3VsYXRlU2VydmljZSxcclxuICAgIFJlZmVyZW5jZVNlcnZpY2UgLy8g0LTQu9GPINC60L7QvNC/0L7QvdC10L3RgtCwINGB0L/QuNGB0L7QulxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElucHV0VGFibGVNb2RhbENvbXBvbmVudCBleHRlbmRzIE1vZGFsU2VydmljZUNvbXBvbmVudDxJbnB1dFRhYmxlTW9kYWxQYXJhbXMsIElucHV0VGFibGVNb2RhbFJlc3VsdD4ge1xyXG4gIHB1YmxpYyB0aXRsZSE6IHN0cmluZztcclxuICBwdWJsaWMgb2tUZXh0ITogc3RyaW5nO1xyXG4gIHB1YmxpYyBzZXR0aW5ncyE6IElucHV0VGFibGVNb2RlbDtcclxuICBwdWJsaWMgcm93TW9kZWwhOiBUYWJsZVJvd01vZGVsO1xyXG4gIC8vINCX0LDQv9C+0LzQuNC90LDQtdC8INGB0YLQsNGC0YPRgSDQv9GA0L7QstC10YDQutC4INGE0L7RgNC80Ysg0L/RgNC4INC+0YLQutGA0YvRgtC40Lgg0LzQvtC00LDQu9C60LhcclxuICBwdWJsaWMgaXNDaGVja1JlcXVpcmVkITogYm9vbGVhbjtcclxuICBwdWJsaWMgZW1wdHlSb3c6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZGlhbG9nUmVmOiBNb2RhbFJlZjxJbnB1dFRhYmxlTW9kYWxSZXN1bHQ+LFxyXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXHJcbiAgICBwcml2YXRlIGZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlOiBGb3JtdWxhQ2FsY3VsYXRlU2VydmljZSxcclxuICAgIEBJbmplY3QoTU9EQUxfREFUQSkgZGF0YTogSW5wdXRUYWJsZU1vZGFsUGFyYW1zLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICB0aGlzLnRpdGxlID0gZGF0YS50aXRsZTtcclxuICAgIHRoaXMub2tUZXh0ID0gZGF0YS5va1RleHRcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBkYXRhLnNldHRpbmdzO1xyXG4gICAgdGhpcy5yb3dNb2RlbCA9IGRhdGEucm93TW9kZWw7XHJcbiAgICB0aGlzLmlzQ2hlY2tSZXF1aXJlZCA9IGRhdGEuaXNDaGVja1JlcXVpcmVkO1xyXG5cclxuICAgIHRoaXMucmVzdWx0ID0ge3Jlc3VsdDogZmFsc2UsIHJvd01vZGVsOiB0aGlzLnJvd01vZGVsfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21wb25lbnRWYWx1ZUNoYW5nZWQodmFsdWVNb2RlbDogQ29tcG9uZW50VmFsdWVNb2RlbCB8IENvbXBvbmVudFZhbHVlTW9kZWxbXSkge1xyXG4gICAgY29uc29sZS5ncm91cCgnPT09INCc0J7QlNCQ0JvQmtCQOiDQmNC30LzQtdC90LXQvdC40LUg0LfQvdCw0YfQtdC90LjRjyDQsiDRhNC+0YDQvNC1ID09PScpO1xyXG4gICAgY29uc29sZS5sb2coJ9Cn0YLQviDQv9GA0LjRiNC70L4g0LjQtyBGb3JtRGlzcGVuc2VyICh2YWx1ZU1vZGVsKTonLCBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWVNb2RlbCkpO1xyXG4gICAgY29uc29sZS5sb2coJ9Ci0LXQutGD0YnQuNC5IHJvd01vZGVsLmRhdGEg0JTQniDRgtGA0LDQvdGB0YTQvtGA0LzQsNGG0LjQuDonLCBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbC5kYXRhKSk7XHJcblxyXG4gICAgLy8gMS4g0J/RgNC40LLQvtC00LjQvCDQstGB0ZEg0Log0LXQtNC40L3QvtC80YMg0LzQsNGB0YHQuNCy0YMsINGH0YLQvtCx0Ysg0L3QtSDQtNGD0LHQu9C40YDQvtCy0LDRgtGMINC70L7Qs9C40LrRg1xyXG4gICAgY29uc3QgaW5jb21pbmdNb2RlbHMgPSBBcnJheS5pc0FycmF5KHZhbHVlTW9kZWwpID8gdmFsdWVNb2RlbCA6IFt2YWx1ZU1vZGVsXTtcclxuXHJcbiAgICAvLyAyLiDQk9GA0YPQv9C/0LjRgNGD0LXQvCDQv9GA0LjRiNC10LTRiNC40LUg0L7QsdGK0LXQutGC0Ysg0L/QviDQuNGFIHN5c05hbWVcclxuICAgIGNvbnN0IGdyb3VwczogeyBba2V5OiBzdHJpbmddOiBDb21wb25lbnRWYWx1ZU1vZGVsW10gfSA9IHt9O1xyXG4gICAgaW5jb21pbmdNb2RlbHMuZm9yRWFjaChtb2RlbCA9PiB7XHJcbiAgICAgIGlmICghZ3JvdXBzW21vZGVsLnN5c05hbWVdKSB7XHJcbiAgICAgICAgZ3JvdXBzW21vZGVsLnN5c05hbWVdID0gW107XHJcbiAgICAgIH1cclxuICAgICAgZ3JvdXBzW21vZGVsLnN5c05hbWVdLnB1c2gobW9kZWwpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gMy4g0J/RgNC+0LHQtdCz0LDQtdC80YHRjyDQv9C+INGB0LPRgNGD0L/Qv9C40YDQvtCy0LDQvdC90YvQvCDQtNCw0L3QvdGL0Lwg0Lgg0LLRi9C30YvQstCw0LXQvCDRgtGA0LDQvdGB0YTQvtGA0LzQsNGG0LjRjlxyXG4gICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKHN5c05hbWUgPT4ge1xyXG4gICAgICBjb25zdCBtb2RlbHNHcm91cCA9IGdyb3Vwc1tzeXNOYW1lXTtcclxuXHJcbiAgICAgIGlmIChtb2RlbHNHcm91cC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgLy8g0J3QsNC50LTQtdC90L4g0L3QtdGB0LrQvtC70YzQutC+INC+0LHRitC10LrRgtC+0LIg0YEg0L7QtNC40L3QsNC60L7QstGL0Lwgc3lzTmFtZSAo0L3QsNGIIFJhbmdlINC00LDRgiEpXHJcbiAgICAgICAgLy8g0KHQvtCx0LjRgNCw0LXQvCDQuNGFINC30L3QsNGH0LXQvdC40Y8gKHZhbHVlKSDQsiDQvtC00LjQvSDQvNCw0YHRgdC40LIg0YHRgtGA0L7QulxyXG4gICAgICAgIGNvbnN0IGNvbWJpbmVkUmFuZ2VWYWx1ZSA9IG1vZGVsc0dyb3VwLm1hcChtID0+IG0udmFsdWUpIGFzIHN0cmluZ1tdO1xyXG5cclxuICAgICAgICAvLyDQodC+0LfQtNCw0LXQvCDQvtC00LjQvSDQstC40YDRgtGD0LDQu9GM0L3Ri9C5IENvbXBvbmVudFZhbHVlTW9kZWwsINCz0LTQtSDQsiB2YWx1ZSDQu9C10LbQuNGCINC80LDRgdGB0LjQsiDRgdGC0YDQvtC6XHJcbiAgICAgICAgY29uc3QgcmFuZ2VNb2RlbENsb25lID0geyBcclxuICAgICAgICAgIC4uLm1vZGVsc0dyb3VwWzBdLCBcclxuICAgICAgICAgIHZhbHVlOiBjb21iaW5lZFJhbmdlVmFsdWUgXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5fdHJhbnNmb3JtVmFsdWVzKHJhbmdlTW9kZWxDbG9uZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g0J7QsdGL0YfQvdGL0Lkg0L7QtNC40L3QvtGH0L3Ri9C5INC60L7QvNC/0L7QvdC10L3RgiAo0YLQtdC60YHRgiwg0YHQstC40YLRhywg0LjQu9C4INC+0LTQuNC90L7Rh9C90LDRjyDQtNCw0YLQsClcclxuICAgICAgICB0aGlzLl90cmFuc2Zvcm1WYWx1ZXMobW9kZWxzR3JvdXBbMF0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9yZWNhbGN1bGF0ZUZvcm11bGFGaWVsZHMoKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZygn0JjRgtC+0LPQvtCy0YvQuSByb3dNb2RlbC5kYXRhINCf0J7QodCb0JUg0YLRgNCw0L3RgdGE0L7RgNC80LDRhtC40Lgg0Lgg0YTQvtGA0LzRg9C7OicsIHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsLmRhdGEpKTtcclxuICAgIHRoaXMuZW1wdHlSb3cgPSB0aGlzLnJvd01vZGVsLmRhdGEuZXZlcnkoeCA9PiB0aGlzLmlzRW1wdHkoeC52YWx1ZSwgeC52YWx1ZVR5cGUpKTtcclxuICAgIGNvbnNvbGUubG9nKCfQodGC0LDRgtGD0YEgZW1wdHlSb3c6JywgdGhpcy5lbXB0eVJvdyk7XHJcbiAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgXHJcblxyXG4gICAgY29uc29sZS5sb2coJ9CY0YLQvtCz0L7QstGL0Lkgcm93TW9kZWwuZGF0YSDQn9Ce0KHQm9CVINGC0YDQsNC90YHRhNC+0YDQvNCw0YbQuNC4INC4INGE0L7RgNC80YPQuzonLCBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5yb3dNb2RlbC5kYXRhKSk7XHJcbiAgICB0aGlzLmVtcHR5Um93ID0gdGhpcy5yb3dNb2RlbC5kYXRhLmV2ZXJ5KHggPT4gdGhpcy5pc0VtcHR5KHgudmFsdWUsIHgudmFsdWVUeXBlKSk7XHJcbiAgICBjb25zb2xlLmxvZygn0KHRgtCw0YLRg9GBIGVtcHR5Um93OicsIHRoaXMuZW1wdHlSb3cpO1xyXG4gICAgY29uc29sZS5ncm91cEVuZCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9rKCkge1xyXG4gICAgY29uc29sZS5ncm91cCgnPT09INCc0J7QlNCQ0JvQmtCQOiDQndCw0LbQsNGC0LAg0LrQvdC+0L/QutCwINCe0JogPT09Jyk7XHJcbiAgICBjb25zb2xlLmxvZygn0KTQuNC90LDQu9GM0L3Ri9C5IHJvd01vZGVsINC/0LXRgNC10LQg0L7RgtC/0YDQsNCy0LrQvtC5INCyINGC0LDQsdC70LjRhtGDOicsIHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsKSk7XHJcbiAgICBcclxuICAgIGlmICghdGhpcy5faXNWYWxpZCgpKSB7XHJcbiAgICAgIGNvbnNvbGUud2Fybign0JLQsNC70LjQtNCw0YbQuNGPINC80L7QtNCw0LvQutC4INCd0JUg0J/QoNCe0JnQlNCV0J3QkCcpO1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG9iamVjdEZvcm1BY3Rpb25zLnVwZGF0ZUNoZWNrUmVxdWlyZWQoeyBpc0NoZWNrUmVxdWlyZWQ6IHRydWUgfSkpO1xyXG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygn0JLQsNC70LjQtNCw0YbQuNGPINGD0YHQv9C10YjQvdCwLiDQl9Cw0LrRgNGL0LLQsNC10Lwg0LzQvtC00LDQu9C60YMg0YEg0YDQtdC30YPQu9GM0YLQsNGC0L7QvCB0cnVlLicpO1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChvYmplY3RGb3JtQWN0aW9ucy51cGRhdGVDaGVja1JlcXVpcmVkKHsgaXNDaGVja1JlcXVpcmVkOiB0aGlzLmlzQ2hlY2tSZXF1aXJlZCB9KSk7XHJcbiAgICB0aGlzLnJlc3VsdCA9IHsgcmVzdWx0OiB0cnVlLCByb3dNb2RlbDogdGhpcy5yb3dNb2RlbCB9O1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoc3RydWN0dXJlZENsb25lKHRoaXMucmVzdWx0KSk7XHJcbiAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoKSB7XHJcbiAgICAvLyDQstC+0LfQstGA0LDRidCw0LXQvCDQv9GA0LjQt9C90LDQuiDQutCw0Log0LHRi9C7INC00L4g0L7RgtC60YDRi9GC0LjRjyDQvNC+0LTQsNC70LrQuFxyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChvYmplY3RGb3JtQWN0aW9ucy51cGRhdGVDaGVja1JlcXVpcmVkKHsgaXNDaGVja1JlcXVpcmVkOiB0aGlzLmlzQ2hlY2tSZXF1aXJlZCB9KSk7XHJcblxyXG4gICAgdGhpcy5yZXN1bHQgPSB7cmVzdWx0OiBmYWxzZSwgcm93TW9kZWw6IHRoaXMucm93TW9kZWx9O1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5yZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNmb3JtVmFsdWVzKHZhbHVlOiBDb21wb25lbnRWYWx1ZU1vZGVsKSB7XHJcbiAgICBjb25zdCBjbG9uZVJvd01vZGVsID0gc3RydWN0dXJlZENsb25lKHRoaXMucm93TW9kZWwpO1xyXG4gICAgY29uc3QgZmluZFZhbHVlOiBDb21wb25lbnRWYWx1ZU1vZGVsIHwgdW5kZWZpbmVkID0gY2xvbmVSb3dNb2RlbC5kYXRhLmZpbmQoKGM6IENvbXBvbmVudFZhbHVlTW9kZWwpID0+IGMuc3lzTmFtZSA9PT0gdmFsdWUuc3lzTmFtZSk7XHJcblxyXG4gICAgaWYgKGZpbmRWYWx1ZSkge1xyXG4gICAgICBmaW5kVmFsdWUudmFsdWUgPSB2YWx1ZS52YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJvd01vZGVsID0gY2xvbmVSb3dNb2RlbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlY2FsY3VsYXRlRm9ybXVsYUZpZWxkcygpIHtcclxuICAgIGNvbnN0IGZvcm11bGFDb21wb25lbnRzID0gdGhpcy5fZ2V0Rm9ybXVsYU51bWJlckNvbXBvbmVudHModGhpcy5zZXR0aW5ncy5jb21wb25lbnRzKTtcclxuXHJcbiAgICBpZiAoIWZvcm11bGFDb21wb25lbnRzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2xvbmVSb3dNb2RlbCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnJvd01vZGVsKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvcm11bGFDb21wb25lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBoYXNVcGRhdGVzID0gZmFsc2U7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBmb3JtdWxhQ29tcG9uZW50cykge1xyXG4gICAgICAgIGNvbnN0IGZvcm11bGEgPSBjb21wb25lbnQub3B0aW9ucz8uZm9ybXVsYT8udHJpbSgpO1xyXG4gICAgICAgIGlmICghZm9ybXVsYSkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZvcm11bGFDYWxjdWxhdGVTZXJ2aWNlLmNhbGN1bGF0ZU1hdGhFeHByZXNzaW9uKGZvcm11bGEsIGNsb25lUm93TW9kZWwuZGF0YSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gY2xvbmVSb3dNb2RlbC5kYXRhLmZpbmQoeCA9PiB4LnN5c05hbWUgPT09IGNvbXBvbmVudC5zeXNOYW1lKTtcclxuICAgICAgICBpZiAoIXRhcmdldFZhbHVlIHx8IHRhcmdldFZhbHVlLnZhbHVlID09PSByZXN1bHQpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGFyZ2V0VmFsdWUudmFsdWUgPSByZXN1bHQ7XHJcbiAgICAgICAgaGFzVXBkYXRlcyA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaGFzVXBkYXRlcykge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yb3dNb2RlbCA9IGNsb25lUm93TW9kZWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRGb3JtdWxhTnVtYmVyQ29tcG9uZW50cyhjb21wb25lbnRzOiBDb21wb25lbnRNb2RlbEJhc2VbXSk6IElucHV0TnVtYmVyTW9kZWxbXSB7XHJcbiAgICBjb25zdCByZXN1bHQ6IElucHV0TnVtYmVyTW9kZWxbXSA9IFtdO1xyXG5cclxuICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGNvbXBvbmVudC50eXBlID09PSBDb21wb25lbnRUeXBlLklucHV0TnVtYmVyICYmXHJcbiAgICAgICAgKGNvbXBvbmVudCBhcyBJbnB1dE51bWJlck1vZGVsKS5vcHRpb25zPy5pbnB1dFN0YXRlID09PSBJbnB1dFN0YXRlLkZvcm11bGFcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmVzdWx0LnB1c2goY29tcG9uZW50IGFzIElucHV0TnVtYmVyTW9kZWwpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29tcG9uZW50LmNvbXBvbmVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuX2dldEZvcm11bGFOdW1iZXJDb21wb25lbnRzKGNvbXBvbmVudC5jb21wb25lbnRzKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHZhciBoYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgdmFyIHJlcXVpcmVkQ29tcG9uZW50cyA9IHRoaXMuX2dldFJlcXVpcmVkQ29tcG9uZW50cyh0aGlzLnNldHRpbmdzLmNvbXBvbmVudHMpO1xyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgcmVxdWlyZWRDb21wb25lbnRzKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5yb3dNb2RlbC5kYXRhXHJcbiAgICAgICAgLmZpbmQoeCA9PiB4LnN5c05hbWUgPT0gY29tcG9uZW50LnN5c05hbWVcclxuICAgICAgICAgICAgICB8fCB4LnN5c05hbWUgPT0gYCR7Y29tcG9uZW50LnN5c05hbWV9X3N0YXJ0YFxyXG4gICAgICAgICAgICAgIHx8IHguc3lzTmFtZSA9PSBgJHtjb21wb25lbnQuc3lzTmFtZX1fZW5kYCk7XHJcbiAgICAgIGlmICghdmFsdWU/LnZhbHVlKSB7XHJcbiAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIWhhc0Vycm9yO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UmVxdWlyZWRDb21wb25lbnRzKGNvbXBvbmVudHM6IENvbXBvbmVudE1vZGVsQmFzZVtdKTogQ29tcG9uZW50TW9kZWxCYXNlW117XHJcbiAgICB2YXIgY29tcG9uZW50cyA9IGNvbXBvbmVudHMuZmlsdGVyKHggPT4geC50eXBlICE9IENvbXBvbmVudFR5cGUuR3JvdXAgJiYgISF4Lm9wdGlvbnMucmVxdWlyZWQpO1xyXG4gICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cy5maWx0ZXIoeCA9PiB4LnR5cGUgPT0gQ29tcG9uZW50VHlwZS5Hcm91cCAmJiB4LmNvbXBvbmVudHMubGVuZ3RoID4gMCkpIHtcclxuICAgICAgdGhpcy5fZ2V0UmVxdWlyZWRDb21wb25lbnRzKGNvbXBvbmVudC5jb21wb25lbnRzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb21wb25lbnRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0VtcHR5KHZhbHVlOiBhbnksIHR5cGU6IFZhbHVlVHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGUgPT09IFZhbHVlVHlwZS5VbmRlZmluZWQpIHJldHVybiB0cnVlO1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlLmxlbmd0aCA9PT0gMDtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPG1yeC1tb2RhbFxyXG4gIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgc2l6ZT1cImxhcmdlXCJcclxuICAoY2xvc2UpPVwiY2xvc2UoKVwiXHJcbiAgKG9rKT1cIm9rKClcIlxyXG4+XHJcbiAgPGFwcC1mb3JtLWRpc3BlbnNlci1tb2RhbFxyXG4gICAgW3NlY3Rpb25TZXR0aW5nc109XCJzZXR0aW5nc1wiXHJcbiAgICBbdmFsdWVzXT1cInJvd01vZGVsLmRhdGFcIlxyXG4gICAgW3ZhbHVlTW9kZV09XCInbWFudWFsJ1wiXHJcbiAgICAoY2hhbmdlZCk9XCJjb21wb25lbnRWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgPjwvYXBwLWZvcm0tZGlzcGVuc2VyLW1vZGFsPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2Zvb3RlckNvbnRlbnQ+XHJcbiAgICA8bXJ4LWJ1dHRvblxyXG4gICAgICBbY3VzdG9tQ2xhc3Nlc109XCInbXItMydcIlxyXG4gICAgICBbdHlwZV09XCInc2Vjb25kYXJ5J1wiXHJcbiAgICAgIFtzaXplXT1cIidtZWRpdW0nXCJcclxuICAgICAgKGNsaWNrKT1cImNsb3NlKClcIlxyXG4gICAgPtCe0YLQvNC10L3QsFxyXG4gICAgPC9tcngtYnV0dG9uPlxyXG4gICAgPG1yeC1idXR0b25cclxuICAgICAgW3R5cGVdPVwiJ3ByaW1hcnknXCJcclxuICAgICAgW3NpemVdPVwiJ21lZGl1bSdcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiZW1wdHlSb3dcIlxyXG4gICAgICAoY2xpY2spPVwib2soKVwiXHJcbiAgICA+e3sgb2tUZXh0IH19XHJcbiAgICA8L21yeC1idXR0b24+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9tcngtbW9kYWw+XHJcbiJdfQ==
@@ -17,7 +17,7 @@ import { AutoSaveStore, ToasterType, LabelModule, ModalServiceComponent, MODAL_D
17
17
  import { HttpHeaders, HttpClient, HTTP_INTERCEPTORS } from '@angular/common/http';
18
18
  import * as i2$1 from '@myrtex-org/templates';
19
19
  import { FormHeaderModule, MenuAdminModule } from '@myrtex-org/templates';
20
- import { cloneDeep, isArray } from 'lodash-es';
20
+ import { cloneDeep } from 'lodash-es';
21
21
  import * as i2$2 from '@angular/forms';
22
22
  import { FormsModule } from '@angular/forms';
23
23
  import { provideNgxMask } from 'ngx-mask';
@@ -2210,19 +2210,44 @@ class InputTableModalComponent extends ModalServiceComponent {
2210
2210
  console.group('=== МОДАЛКА: Изменение значения в форме ===');
2211
2211
  console.log('Что пришло из FormDispenser (valueModel):', structuredClone(valueModel));
2212
2212
  console.log('Текущий rowModel.data ДО трансформации:', structuredClone(this.rowModel.data));
2213
- if (isArray(valueModel)) {
2214
- valueModel.forEach(model => {
2215
- this._transformValues(model);
2216
- });
2217
- }
2218
- else {
2219
- this._transformValues(valueModel);
2220
- }
2213
+ // 1. Приводим всё к единому массиву, чтобы не дублировать логику
2214
+ const incomingModels = Array.isArray(valueModel) ? valueModel : [valueModel];
2215
+ // 2. Группируем пришедшие объекты по их sysName
2216
+ const groups = {};
2217
+ incomingModels.forEach(model => {
2218
+ if (!groups[model.sysName]) {
2219
+ groups[model.sysName] = [];
2220
+ }
2221
+ groups[model.sysName].push(model);
2222
+ });
2223
+ // 3. Пробегаемся по сгруппированным данным и вызываем трансформацию
2224
+ Object.keys(groups).forEach(sysName => {
2225
+ const modelsGroup = groups[sysName];
2226
+ if (modelsGroup.length > 1) {
2227
+ // Найдено несколько объектов с одинаковым sysName (наш Range дат!)
2228
+ // Собираем их значения (value) в один массив строк
2229
+ const combinedRangeValue = modelsGroup.map(m => m.value);
2230
+ // Создаем один виртуальный ComponentValueModel, где в value лежит массив строк
2231
+ const rangeModelClone = {
2232
+ ...modelsGroup[0],
2233
+ value: combinedRangeValue
2234
+ };
2235
+ this._transformValues(rangeModelClone);
2236
+ }
2237
+ else {
2238
+ // Обычный одиночный компонент (текст, свитч, или одиночная дата)
2239
+ this._transformValues(modelsGroup[0]);
2240
+ }
2241
+ });
2221
2242
  this._recalculateFormulaFields();
2222
2243
  console.log('Итоговый rowModel.data ПОСЛЕ трансформации и формул:', structuredClone(this.rowModel.data));
2223
2244
  this.emptyRow = this.rowModel.data.every(x => this.isEmpty(x.value, x.valueType));
2224
2245
  console.log('Статус emptyRow:', this.emptyRow);
2225
2246
  console.groupEnd();
2247
+ console.log('Итоговый rowModel.data ПОСЛЕ трансформации и формул:', structuredClone(this.rowModel.data));
2248
+ this.emptyRow = this.rowModel.data.every(x => this.isEmpty(x.value, x.valueType));
2249
+ console.log('Статус emptyRow:', this.emptyRow);
2250
+ console.groupEnd();
2226
2251
  }
2227
2252
  ok() {
2228
2253
  console.group('=== МОДАЛКА: Нажата кнопка ОК ===');