@infomaximum/widget-sdk 4.0.0-beta6 → 4.0.0-beta61

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.esm.js CHANGED
@@ -2,103 +2,73 @@ import { Localization } from '@infomaximum/localization';
2
2
  export { ELanguages } from '@infomaximum/localization';
3
3
  export { EFilteringMethodValues } from '@infomaximum/base-filter';
4
4
 
5
- /******************************************************************************
6
- Copyright (c) Microsoft Corporation.
7
-
8
- Permission to use, copy, modify, and/or distribute this software for any
9
- purpose with or without fee is hereby granted.
10
-
11
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
12
- REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13
- AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
14
- INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15
- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
16
- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17
- PERFORMANCE OF THIS SOFTWARE.
18
- ***************************************************************************** */
19
- /* global Reflect, Promise, SuppressedError, Symbol */
20
-
21
-
22
- var __assign = function() {
23
- __assign = Object.assign || function __assign(t) {
24
- for (var s, i = 1, n = arguments.length; i < n; i++) {
25
- s = arguments[i];
26
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
27
- }
28
- return t;
29
- };
30
- return __assign.apply(this, arguments);
31
- };
32
-
33
- function __read(o, n) {
34
- var m = typeof Symbol === "function" && o[Symbol.iterator];
35
- if (!m) return o;
36
- var i = m.call(o), r, ar = [], e;
37
- try {
38
- while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
39
- }
40
- catch (error) { e = { error: error }; }
41
- finally {
42
- try {
43
- if (r && !r.done && (m = i["return"])) m.call(i);
44
- }
45
- finally { if (e) throw e.error; }
46
- }
47
- return ar;
48
- }
49
-
50
- function __spreadArray(to, from, pack) {
51
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
52
- if (ar || !(i in from)) {
53
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
54
- ar[i] = from[i];
55
- }
56
- }
57
- return to.concat(ar || Array.prototype.slice.call(from));
58
- }
59
-
60
- typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
61
- var e = new Error(message);
62
- return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
63
- };
64
-
65
- var EWidgetActionInputMode;
66
- (function (EWidgetActionInputMode) {
67
- EWidgetActionInputMode["FROM_COLUMN"] = "FROM_COLUMN";
68
- EWidgetActionInputMode["FROM_VARIABLE"] = "FROM_VARIABLE";
69
- EWidgetActionInputMode["STATIC_LIST"] = "STATIC_LIST";
70
- EWidgetActionInputMode["DYNAMIC_LIST"] = "DYNAMIC_LIST";
71
- EWidgetActionInputMode["FORMULA"] = "FORMULA";
72
- EWidgetActionInputMode["MANUALLY"] = "MANUALLY";
73
- })(EWidgetActionInputMode || (EWidgetActionInputMode = {}));
74
- var isActionValid = function (action, _a) {
5
+ var EWidgetActionInputMethod;
6
+ (function (EWidgetActionInputMethod) {
7
+ EWidgetActionInputMethod["COLUMN"] = "COLUMN";
8
+ EWidgetActionInputMethod["VARIABLE"] = "VARIABLE";
9
+ EWidgetActionInputMethod["STATIC_LIST"] = "STATIC_LIST";
10
+ EWidgetActionInputMethod["DYNAMIC_LIST"] = "DYNAMIC_LIST";
11
+ EWidgetActionInputMethod["FORMULA"] = "FORMULA";
12
+ EWidgetActionInputMethod["MANUALLY"] = "MANUALLY";
13
+ EWidgetActionInputMethod["EVENT"] = "EVENT";
14
+ EWidgetActionInputMethod["START_EVENT"] = "START_EVENT";
15
+ EWidgetActionInputMethod["FINISH_EVENT"] = "FINISH_EVENT";
16
+ })(EWidgetActionInputMethod || (EWidgetActionInputMethod = {}));
17
+ var EActionTypes;
18
+ (function (EActionTypes) {
19
+ EActionTypes["OPEN_URL"] = "OPEN_URL";
20
+ EActionTypes["UPDATE_VARIABLE"] = "UPDATE_VARIABLE";
21
+ EActionTypes["EXECUTE_SCRIPT"] = "EXECUTE_SCRIPT";
22
+ EActionTypes["OPEN_VIEW"] = "OPEN_VIEW";
23
+ })(EActionTypes || (EActionTypes = {}));
24
+ var EViewMode;
25
+ (function (EViewMode) {
26
+ EViewMode["EXISTED_VIEW"] = "EXISTED_VIEW";
27
+ EViewMode["GENERATED_BY_SCRIPT"] = "GENERATED_BY_SCRIPT";
28
+ EViewMode["EMPTY"] = "EMPTY";
29
+ })(EViewMode || (EViewMode = {}));
30
+ var EViewOpenIn;
31
+ (function (EViewOpenIn) {
32
+ EViewOpenIn["NEW_WINDOW"] = "NEW_WINDOW";
33
+ EViewOpenIn["CURRENT_WINDOW"] = "CURRENT_WINDOW";
34
+ EViewOpenIn["PLACEHOLDER"] = "PLACEHOLDER";
35
+ EViewOpenIn["MODAL_WINDOW"] = "MODAL_WINDOW";
36
+ EViewOpenIn["DRAWER_WINDOW"] = "DRAWER_WINDOW";
37
+ })(EViewOpenIn || (EViewOpenIn = {}));
38
+ var EDrawerPlacement;
39
+ (function (EDrawerPlacement) {
40
+ EDrawerPlacement["LEFT"] = "LEFT";
41
+ EDrawerPlacement["RIGHT"] = "RIGHT";
42
+ })(EDrawerPlacement || (EDrawerPlacement = {}));
43
+ var isExecuteScriptActionValid = function (action, _a) {
75
44
  var _b;
76
- var scripts = _a.scripts, tables = _a.tables;
77
- var currentScript = scripts.get((_b = action.scriptGuid) !== null && _b !== void 0 ? _b : "");
45
+ var scripts = _a.scripts, tables = _a.tables, variables = _a.variables;
46
+ var currentScript = scripts.get((_b = action.scriptKey) !== null && _b !== void 0 ? _b : "");
78
47
  if (!currentScript) {
79
48
  return false;
80
49
  }
81
- var actionInputsMap = new Map(action.inputs.map(function (input) { return [input.guid, input]; }));
82
- if (actionInputsMap.size < currentScript.fieldsGuids.size) {
50
+ var actionInputsMap = new Map(action.parameters.map(function (parameter) { return [parameter.name, parameter]; }));
51
+ if (actionInputsMap.size < currentScript.fields.length) {
83
52
  return false;
84
53
  }
85
- return __spreadArray([], __read(currentScript.fieldsGuids), false).every(function (guid) {
86
- var actionInput = actionInputsMap.get(guid !== null && guid !== void 0 ? guid : "");
54
+ return currentScript.fields.every(function (_a) {
55
+ var name = _a.name;
56
+ var actionInput = actionInputsMap.get(name !== null && name !== void 0 ? name : "");
87
57
  if (!actionInput) {
88
58
  return false;
89
59
  }
90
- var value = actionInput.value;
91
- if (value.mode === EWidgetActionInputMode.FROM_VARIABLE && !value.guid) {
60
+ if (actionInput.inputMethod === EWidgetActionInputMethod.VARIABLE &&
61
+ !variables.has(actionInput.sourceVariable)) {
92
62
  return false;
93
63
  }
94
- if (value.mode === EWidgetActionInputMode.FORMULA && !value.formula) {
64
+ if (actionInput.inputMethod === EWidgetActionInputMethod.FORMULA && !actionInput.formula) {
95
65
  return false;
96
66
  }
97
- if (value.mode === EWidgetActionInputMode.DYNAMIC_LIST && !value.formula) {
67
+ if (actionInput.inputMethod === EWidgetActionInputMethod.DYNAMIC_LIST && !actionInput.formula) {
98
68
  return false;
99
69
  }
100
- if (value.mode === EWidgetActionInputMode.FROM_COLUMN &&
101
- !tables.has(value.tableName)) {
70
+ if (actionInput.inputMethod === EWidgetActionInputMethod.COLUMN &&
71
+ !tables.has(actionInput.tableName)) {
102
72
  return false;
103
73
  }
104
74
  return true;
@@ -123,9 +93,7 @@ var prepareValuesForSql = function (dataType, values) {
123
93
  dataType === ESimpleDataType.BOOLEAN
124
94
  ? values
125
95
  : values.map(function (value) {
126
- return value === null
127
- ? null
128
- : "'".concat(escapeSingularQuotes(escapeReverseSlash(value)), "'");
96
+ return value === null ? null : "'".concat(escapeSingularQuotes(escapeReverseSlash(value)), "'");
129
97
  });
130
98
  };
131
99
  var escapeReverseSlash = function (formula) {
@@ -135,19 +103,39 @@ var escapeSingularQuotes = function (formula) {
135
103
  return formula.replaceAll("'", "\\'");
136
104
  };
137
105
 
138
- var compact = function (items) { return ((items === null || items === void 0 ? void 0 : items.filter(Boolean)) || []); };
139
- var compactMap = function (items, f) { return compact(items === null || items === void 0 ? void 0 : items.map(f)); };
140
- var isNil = function (value) {
141
- return value === null || value === undefined;
106
+ /******************************************************************************
107
+ Copyright (c) Microsoft Corporation.
108
+
109
+ Permission to use, copy, modify, and/or distribute this software for any
110
+ purpose with or without fee is hereby granted.
111
+
112
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
113
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
114
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
115
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
116
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
117
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
118
+ PERFORMANCE OF THIS SOFTWARE.
119
+ ***************************************************************************** */
120
+ /* global Reflect, Promise, SuppressedError, Symbol */
121
+
122
+
123
+ var __assign = function() {
124
+ __assign = Object.assign || function __assign(t) {
125
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
126
+ s = arguments[i];
127
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
128
+ }
129
+ return t;
130
+ };
131
+ return __assign.apply(this, arguments);
132
+ };
133
+
134
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
135
+ var e = new Error(message);
136
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
142
137
  };
143
138
 
144
- function mapVariablesToInputs(variables) {
145
- return new Map(compactMap(__spreadArray([], __read(variables.values()), false), function (_a) {
146
- var name = _a.name, dataType = _a.dataType, value = _a.value;
147
- return !isNil(value) ? [name, { dataType: dataType, value: value }] : null;
148
- }));
149
- }
150
-
151
139
  var ECalculatorFilterMethods;
152
140
  (function (ECalculatorFilterMethods) {
153
141
  ECalculatorFilterMethods["EQUAL_TO"] = "EQUAL_TO";
@@ -192,6 +180,17 @@ var EFormulaFilterFieldKeys;
192
180
  EFormulaFilterFieldKeys["lastTimeUnit"] = "lastTimeUnit";
193
181
  EFormulaFilterFieldKeys["durationUnit"] = "durationUnit";
194
182
  })(EFormulaFilterFieldKeys || (EFormulaFilterFieldKeys = {}));
183
+ var isFormulaFilterValue = function (value) {
184
+ return "filteringMethod" in value;
185
+ };
186
+
187
+ var compact = function (items) { return ((items === null || items === void 0 ? void 0 : items.filter(Boolean)) || []); };
188
+ var compactMap = function (items, f) {
189
+ return compact(items === null || items === void 0 ? void 0 : items.map(f));
190
+ };
191
+ var isNil = function (value) {
192
+ return value === null || value === undefined;
193
+ };
195
194
 
196
195
  var EFormatTypes;
197
196
  (function (EFormatTypes) {
@@ -230,7 +229,7 @@ var EFormattingPresets;
230
229
  (function (EFormattingPresets) {
231
230
  //Общая группа шаблонов
232
231
  EFormattingPresets["AUTO"] = "AUTO";
233
- EFormattingPresets["TUNE"] = "TUNE";
232
+ EFormattingPresets["CUSTOM"] = "CUSTOM";
234
233
  //Группа шаблонов для формата DATE
235
234
  EFormattingPresets["DD/M/YYYY"] = "DD/M/YYYY";
236
235
  EFormattingPresets["DD-MM-YYYY"] = "DD-MM-YYYY";
@@ -446,10 +445,10 @@ var mapFormulaFilterToCalculatorInput = function (filterValue) {
446
445
  if (!filterValue) {
447
446
  return null;
448
447
  }
449
- if (typeof filterValue === "string") {
448
+ if (!isFormulaFilterValue(filterValue)) {
450
449
  return {
451
450
  dataType: ESimpleDataType.OTHER,
452
- formula: filterValue,
451
+ formula: filterValue.formula,
453
452
  values: ["1"],
454
453
  filteringMethod: formulaFilterMethods.EQUAL_TO,
455
454
  };
@@ -474,25 +473,28 @@ var EWidgetFilterMode;
474
473
  EWidgetFilterMode["MULTI"] = "MULTI";
475
474
  EWidgetFilterMode["DISABLED"] = "DISABLED";
476
475
  })(EWidgetFilterMode || (EWidgetFilterMode = {}));
477
- var EColorMode;
478
- (function (EColorMode) {
479
- EColorMode["FORMULA"] = "FORMULA";
480
- EColorMode["BASE"] = "BASE";
481
- EColorMode["GRADIENT"] = "GRADIENT";
482
- EColorMode["AUTO"] = "AUTO";
483
- })(EColorMode || (EColorMode = {}));
476
+ var EMarkdownDisplayMode;
477
+ (function (EMarkdownDisplayMode) {
478
+ EMarkdownDisplayMode["NONE"] = "NONE";
479
+ EMarkdownDisplayMode["INDICATOR"] = "INDICATOR";
480
+ })(EMarkdownDisplayMode || (EMarkdownDisplayMode = {}));
484
481
  var EDisplayConditionMode;
485
482
  (function (EDisplayConditionMode) {
486
483
  EDisplayConditionMode["DISABLED"] = "DISABLED";
487
484
  EDisplayConditionMode["FORMULA"] = "FORMULA";
488
485
  EDisplayConditionMode["VARIABLE"] = "VARIABLE";
489
486
  })(EDisplayConditionMode || (EDisplayConditionMode = {}));
487
+ var EFontWeight;
488
+ (function (EFontWeight) {
489
+ EFontWeight["NORMAL"] = "NORMAL";
490
+ EFontWeight["BOLD"] = "BOLD";
491
+ })(EFontWeight || (EFontWeight = {}));
490
492
 
491
493
  function checkDisplayCondition(displayCondition, variables) {
492
494
  var _a;
493
495
  if ((displayCondition === null || displayCondition === void 0 ? void 0 : displayCondition.mode) === EDisplayConditionMode.VARIABLE) {
494
- var variableGuid = displayCondition.variableGuid, variableValue = displayCondition.variableValue;
495
- var currentVariableValue = variableGuid && ((_a = variables.get(variableGuid)) === null || _a === void 0 ? void 0 : _a.value);
496
+ var variableName = displayCondition.variableName, variableValue = displayCondition.variableValue;
497
+ var currentVariableValue = variableName && ((_a = variables.get(variableName)) === null || _a === void 0 ? void 0 : _a.value);
496
498
  var isCurrentVariableMatch = Array.isArray(currentVariableValue)
497
499
  ? !!variableValue && (currentVariableValue === null || currentVariableValue === void 0 ? void 0 : currentVariableValue.includes(variableValue))
498
500
  : currentVariableValue === variableValue;
@@ -508,17 +510,14 @@ function getDisplayConditionFormula(displayCondition) {
508
510
  }
509
511
  }
510
512
  var replaceDisplayCondition = function (dimension, displayCondition) {
511
- return isNil(displayCondition)
512
- ? dimension
513
- : __assign(__assign({}, dimension), { displayCondition: displayCondition });
513
+ return isNil(displayCondition) ? dimension : __assign(__assign({}, dimension), { displayCondition: displayCondition });
514
514
  };
515
515
 
516
516
  var escapeSpecialCharacters = function (formula) {
517
517
  return formula
518
518
  .replaceAll("\\", "\\\\")
519
519
  .replaceAll('"', '\\"')
520
- .replaceAll("`", "\\`")
521
- .replaceAll("-", "\\-");
520
+ .replaceAll("`", "\\`");
522
521
  };
523
522
 
524
523
  function generateColumnFormula(tableName, columnName) {
@@ -536,10 +535,7 @@ var EWidgetIndicatorType;
536
535
  EWidgetIndicatorType["EVENT_INDICATOR"] = "EVENT_INDICATOR";
537
536
  EWidgetIndicatorType["TRANSITION_INDICATOR"] = "TRANSITION_INDICATOR";
538
537
  EWidgetIndicatorType["DIMENSION"] = "DIMENSION";
539
- EWidgetIndicatorType["DIMENSION_HIERARCHY"] = "DIMENSION_HIERARCHY";
540
- EWidgetIndicatorType["VARIABLE"] = "VARIABLE";
541
538
  EWidgetIndicatorType["SORTING"] = "SORTING";
542
- EWidgetIndicatorType["CUSTOM"] = "CUSTOM";
543
539
  })(EWidgetIndicatorType || (EWidgetIndicatorType = {}));
544
540
  var EDbType;
545
541
  (function (EDbType) {
@@ -559,18 +555,8 @@ var ESortingValueModes;
559
555
  (function (ESortingValueModes) {
560
556
  /** Сортировка по формуле */
561
557
  ESortingValueModes["FORMULA"] = "FORMULA";
562
- /** Пункт "Количество" */
563
- ESortingValueModes["QUANTITY"] = "QUANTITY";
564
- /** @deprecated Для сортировки по иерархии используется режим DIMENSION_IN_WIDGET */
565
- ESortingValueModes["HIERARCHY"] = "HIERARCHY";
566
- /** Сортировка по мере виджета */
567
- ESortingValueModes["MEASURE_IN_WIDGET"] = "MEASURE_IN_WIDGET";
568
- /** Сортировка по разрезу(в т.ч. по иерархии) виджета */
569
- ESortingValueModes["DIMENSION_IN_WIDGET"] = "DIMENSION_IN_WIDGET";
570
- /** Сортировка по мере отчета */
571
- ESortingValueModes["IN_DASHBOARD"] = "IN_DASHBOARD";
572
- /** Сортировка по мере пространства */
573
- ESortingValueModes["IN_WORKSPACE"] = "IN_WORKSPACE";
558
+ /** Сортировка по показателю(разрезу или мере) виджета */
559
+ ESortingValueModes["IN_WIDGET"] = "IN_WIDGET";
574
560
  })(ESortingValueModes || (ESortingValueModes = {}));
575
561
  /** Тип показателя */
576
562
  var EIndicatorType;
@@ -592,8 +578,8 @@ var EIndicatorType;
592
578
  /** Пользовательская сортировка */
593
579
  EIndicatorType["USER_SORTING"] = "USER_SORTING";
594
580
  })(EIndicatorType || (EIndicatorType = {}));
595
- function isHierarchy(indicator) {
596
- return indicator.type === EWidgetIndicatorType.DIMENSION_HIERARCHY;
581
+ function isDimensionsHierarchy(indicator) {
582
+ return "hierarchyDimensions" in indicator;
597
583
  }
598
584
 
599
585
  var _a$3;
@@ -689,11 +675,11 @@ function getMeasureFormula(_a) {
689
675
  var _a$1;
690
676
  var EEventMeasureTemplateNames;
691
677
  (function (EEventMeasureTemplateNames) {
692
- EEventMeasureTemplateNames["count"] = "count";
678
+ EEventMeasureTemplateNames["eventsCount"] = "eventsCount";
693
679
  EEventMeasureTemplateNames["reworksCount"] = "reworksCount";
694
680
  })(EEventMeasureTemplateNames || (EEventMeasureTemplateNames = {}));
695
681
  var eventMeasureTemplateFormulas = (_a$1 = {},
696
- _a$1[EEventMeasureTemplateNames.count] = "count()",
682
+ _a$1[EEventMeasureTemplateNames.eventsCount] = "count()",
697
683
  _a$1[EEventMeasureTemplateNames.reworksCount] = "count() - uniqExact({caseCaseIdFormula})",
698
684
  _a$1);
699
685
  function getEventMeasureFormula(_a, process) {
@@ -714,11 +700,11 @@ function getEventMeasureFormula(_a, process) {
714
700
  var _a;
715
701
  var ETransitionMeasureTemplateNames;
716
702
  (function (ETransitionMeasureTemplateNames) {
717
- ETransitionMeasureTemplateNames["count"] = "count";
703
+ ETransitionMeasureTemplateNames["transitionsCount"] = "transitionsCount";
718
704
  ETransitionMeasureTemplateNames["medianTime"] = "medianTime";
719
705
  })(ETransitionMeasureTemplateNames || (ETransitionMeasureTemplateNames = {}));
720
706
  var transitionMeasureTemplateFormulas = (_a = {},
721
- _a[ETransitionMeasureTemplateNames.count] = "count()",
707
+ _a[ETransitionMeasureTemplateNames.transitionsCount] = "count()",
722
708
  _a[ETransitionMeasureTemplateNames.medianTime] = "medianExact(date_diff(second, begin({eventTimeFormula}), end({eventTimeFormula})))",
723
709
  _a);
724
710
  function getTransitionMeasureFormula(_a, process) {
@@ -736,6 +722,35 @@ function getTransitionMeasureFormula(_a, process) {
736
722
  return "";
737
723
  }
738
724
 
725
+ /**
726
+ * Регулярное выражение для поиска имени ссылки внутри формулы.
727
+ * Учитывает, что имя внутри формулы содержит экраны.
728
+ *
729
+ * Принцип работы:
730
+ * Пробовать следующие вхождения:
731
+ * - \\\\ - экранированный символ обратного слэша.
732
+ * - Иначе \\" - экранированный символ кавычки.
733
+ * - Иначе [^"] - любой символ кроме кавычки.
734
+ * Если встречается любой другой символ, то это закрывающая кавычка имени переменной.
735
+ */
736
+ var linkNameRegExp = "(?:\\\\\\\\|\\\\\"|[^\"])+";
737
+ var dashboardLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"(?!\\.\"").concat(linkNameRegExp, "\")"), "g");
738
+ var workspaceLinkRegExp = new RegExp("link: \"(".concat(linkNameRegExp, ")\"\\.\"(").concat(linkNameRegExp, ")\""), "g");
739
+ var parseIndicatorLink = function (formula) {
740
+ var dashboardMatch = formula.match(dashboardLinkRegExp.source);
741
+ if (dashboardMatch) {
742
+ return { scopeName: null, indicatorName: dashboardMatch[1] };
743
+ }
744
+ var workspaceMatch = formula.match(workspaceLinkRegExp.source);
745
+ if (workspaceMatch) {
746
+ return {
747
+ scopeName: unescapeSpecialCharacters(workspaceMatch[1]),
748
+ indicatorName: unescapeSpecialCharacters(workspaceMatch[2]),
749
+ };
750
+ }
751
+ return null;
752
+ };
753
+
739
754
  function mapMeasureToInput(measure, variables, addFormulas) {
740
755
  if (addFormulas === void 0) { addFormulas = function () { return new Map(); }; }
741
756
  var mainFormula = getMeasureFormula(measure);
@@ -755,9 +770,7 @@ function mapMeasureToInput(measure, variables, addFormulas) {
755
770
  }
756
771
  /** Конвертировать меры виджета во входы для вычислителя */
757
772
  function mapMeasuresToInputs(measures, variables, addFormulas) {
758
- return compactMap(measures, function (measure) {
759
- return mapMeasureToInput(measure, variables, addFormulas);
760
- });
773
+ return compactMap(measures, function (measure) { return mapMeasureToInput(measure, variables, addFormulas); });
761
774
  }
762
775
 
763
776
  function mapDimensionToInput(dimension, variables) {
@@ -778,9 +791,7 @@ function mapDimensionToInput(dimension, variables) {
778
791
  }
779
792
  /** Конвертировать разрезы виджета во входы для вычислителя */
780
793
  function mapDimensionsToInputs(dimensions, variables) {
781
- return compactMap(dimensions, function (dimension) {
782
- return mapDimensionToInput(dimension, variables);
783
- });
794
+ return compactMap(dimensions, function (dimension) { return mapDimensionToInput(dimension, variables); });
784
795
  }
785
796
 
786
797
  function mapTransitionMeasureToInput(indicator, process, variables, addFormulas) {
@@ -831,36 +842,13 @@ function mapEventMeasuresToInputs(indicators, process, variables, addFormulas) {
831
842
  });
832
843
  }
833
844
 
834
- /**
835
- * Преобразовать объекты сортировок из settings виджета в sortOrders вычислителя
836
- * @param sortingIndicators объекты сортировок из settings виджета
837
- * @param dimensionsInOriginalOrder разрезы виджета (конкретный разрез будет браться по индексу)
838
- * @param measuresInOriginalOrder меры виджета (конкретная мера будет браться по индексу)
839
- * @returns
840
- */
841
- function mapSortingToInputs(sortingIndicators, dimensionsInOriginalOrder, measuresInOriginalOrder) {
842
- if (sortingIndicators === void 0) { sortingIndicators = []; }
843
- if (dimensionsInOriginalOrder === void 0) { dimensionsInOriginalOrder = []; }
844
- if (measuresInOriginalOrder === void 0) { measuresInOriginalOrder = []; }
845
- return compactMap(sortingIndicators, function (_a) {
846
- var value = _a.value, direction = _a.direction;
847
- if (value.mode === ESortingValueModes.FORMULA ||
848
- value.mode === ESortingValueModes.QUANTITY ||
849
- value.mode === ESortingValueModes.IN_DASHBOARD ||
850
- value.mode === ESortingValueModes.IN_WORKSPACE) {
851
- return value.formula ? { formula: value.formula, direction: direction } : undefined;
852
- }
853
- if (value.mode === ESortingValueModes.DIMENSION_IN_WIDGET ||
854
- value.mode === ESortingValueModes.HIERARCHY) {
855
- var dimension = dimensionsInOriginalOrder[value.index];
856
- return (dimension && { formula: getDimensionFormula(dimension), direction: direction });
857
- }
858
- if (value.mode === ESortingValueModes.MEASURE_IN_WIDGET) {
859
- var measure = measuresInOriginalOrder[value.index];
860
- return measure && { formula: getMeasureFormula(measure), direction: direction };
861
- }
862
- });
863
- }
845
+ var ESortDirection;
846
+ (function (ESortDirection) {
847
+ ESortDirection["descend"] = "DESC";
848
+ ESortDirection["ascend"] = "ASC";
849
+ ESortDirection["ASC"] = "ascend";
850
+ ESortDirection["DESC"] = "descend";
851
+ })(ESortDirection || (ESortDirection = {}));
864
852
 
865
853
  /**
866
854
  * Выбрать активный разрез иерархии на основе активных фильтров.
@@ -869,9 +857,9 @@ function mapSortingToInputs(sortingIndicators, dimensionsInOriginalOrder, measur
869
857
  * Если к разрезу иерархии применяется INCLUDE-фильтр с несколькими значениями - выбираем данный разрез
870
858
  */
871
859
  function selectDimensionFromHierarchy(_a, filters) {
872
- var dimensions = _a.dimensions;
860
+ var hierarchyDimensions = _a.hierarchyDimensions;
873
861
  var _loop_1 = function (i) {
874
- var dimension = dimensions[i];
862
+ var dimension = hierarchyDimensions[i];
875
863
  // todo: widgets - возможно, стоит использовать Map фильтров для быстрого поиска
876
864
  var matchedFilter = filters.find(function (_a) {
877
865
  var formula = _a.formula, filteringMethod = _a.filteringMethod;
@@ -881,25 +869,123 @@ function selectDimensionFromHierarchy(_a, filters) {
881
869
  if (!matchedFilter) {
882
870
  return "continue";
883
871
  }
884
- var selectionIndex = matchedFilter.values.length > 1
885
- ? i
886
- : Math.min(i + 1, dimensions.length - 1);
887
- return { value: dimensions[selectionIndex] };
872
+ var selectionIndex = matchedFilter.values.length > 1 ? i : Math.min(i + 1, hierarchyDimensions.length - 1);
873
+ return { value: hierarchyDimensions[selectionIndex] };
888
874
  };
889
- for (var i = dimensions.length - 1; i >= 0; i--) {
875
+ for (var i = hierarchyDimensions.length - 1; i >= 0; i--) {
890
876
  var state_1 = _loop_1(i);
891
877
  if (typeof state_1 === "object")
892
878
  return state_1.value;
893
879
  }
894
- return dimensions[0];
880
+ return hierarchyDimensions[0];
881
+ }
882
+
883
+ var getDefaultSortOrder = function (dimensions, measures) {
884
+ /** Если есть условие отображения, то не делаем авто-сортировку */
885
+ if (dimensions.some(function (dimension) {
886
+ return dimension.displayCondition &&
887
+ dimension.displayCondition.mode !== EDisplayConditionMode.DISABLED;
888
+ })) {
889
+ return [];
890
+ }
891
+ /** Если есть временной разрез, то авто-сортировка по первому такому разрезу (по возрастанию) */
892
+ var timeDimension = dimensions.find(function (dimension) {
893
+ return dimension.format &&
894
+ [
895
+ EFormatTypes.DATE,
896
+ EFormatTypes.MONTH,
897
+ EFormatTypes.DATETIME,
898
+ EFormatTypes.DAY_OF_WEEK,
899
+ EFormatTypes.HOUR,
900
+ EFormatTypes.MONTH_YEAR,
901
+ EFormatTypes.YEAR,
902
+ EFormatTypes.QUARTER,
903
+ EFormatTypes.QUARTER_YEAR,
904
+ EFormatTypes.DAY_OF_MONTH,
905
+ EFormatTypes.WEEK,
906
+ ].includes(dimension.format);
907
+ });
908
+ if (timeDimension) {
909
+ return [{ formula: getDimensionFormula(timeDimension), direction: ESortDirection.ascend }];
910
+ }
911
+ if (measures.length > 0) {
912
+ var firstMeasure = measures[0];
913
+ if (firstMeasure) {
914
+ return [
915
+ {
916
+ direction: ESortDirection.descend,
917
+ formula: getMeasureFormula(firstMeasure),
918
+ },
919
+ ];
920
+ }
921
+ }
922
+ return [];
923
+ };
924
+ function mapSortingToInputs(_a) {
925
+ var _b;
926
+ var settings = _a.settings, variables = _a.variables, filters = _a.filters, getIndicatorType = _a.getIndicatorType, _c = _a.withDefaultSortOrder, withDefaultSortOrder = _c === void 0 ? true : _c, _d = _a.sortableIndicatorsKeys, sortableIndicatorsKeys = _d === void 0 ? [] : _d;
927
+ var sortOrder = compactMap((_b = settings["sorting"]) !== null && _b !== void 0 ? _b : [], function (_a) {
928
+ var _b;
929
+ var direction = _a.direction, value = _a.value;
930
+ if (value.mode === ESortingValueModes.FORMULA) {
931
+ return value.formula ? { formula: value.formula, direction: direction } : undefined;
932
+ }
933
+ var indicatorsGroup = settings[value.group];
934
+ var indicator = indicatorsGroup === null || indicatorsGroup === void 0 ? void 0 : indicatorsGroup[value.index];
935
+ if (!indicator) {
936
+ return;
937
+ }
938
+ if (getIndicatorType(value.group, indicator) === EWidgetIndicatorType.DIMENSION) {
939
+ var activeDimensions = isDimensionsHierarchy(indicator)
940
+ ? selectDimensionFromHierarchy(indicator, filters)
941
+ : indicator;
942
+ var formula = activeDimensions && getDimensionFormula(activeDimensions);
943
+ if (!formula || !checkDisplayCondition(indicator.displayCondition, variables)) {
944
+ return;
945
+ }
946
+ return {
947
+ formula: formula,
948
+ direction: direction,
949
+ displayCondition: ((_b = indicator.displayCondition) === null || _b === void 0 ? void 0 : _b.mode) === EDisplayConditionMode.FORMULA
950
+ ? indicator.displayCondition.formula
951
+ : undefined,
952
+ };
953
+ }
954
+ return {
955
+ formula: getMeasureFormula(indicator),
956
+ direction: direction,
957
+ };
958
+ });
959
+ if (sortOrder.length > 0) {
960
+ return sortOrder;
961
+ }
962
+ if (sortableIndicatorsKeys.length === 0 || withDefaultSortOrder === false) {
963
+ return [];
964
+ }
965
+ var dimensions = [];
966
+ var measures = [];
967
+ sortableIndicatorsKeys.forEach(function (key) {
968
+ var indicatorsGroup = settings[key];
969
+ indicatorsGroup === null || indicatorsGroup === void 0 ? void 0 : indicatorsGroup.forEach(function (indicator) {
970
+ if (getIndicatorType(key, indicator) === EWidgetIndicatorType.DIMENSION) {
971
+ var activeDimensions = isDimensionsHierarchy(indicator)
972
+ ? selectDimensionFromHierarchy(indicator, filters)
973
+ : indicator;
974
+ activeDimensions && dimensions.push(activeDimensions);
975
+ }
976
+ else {
977
+ measures.push(indicator);
978
+ }
979
+ });
980
+ });
981
+ return getDefaultSortOrder(dimensions, measures);
895
982
  }
896
983
 
897
984
  var replaceHierarchiesWithDimensions = function (dimensions, filters) {
898
985
  return compactMap(dimensions, function (indicator) {
899
- if (isHierarchy(indicator)) {
986
+ if (isDimensionsHierarchy(indicator)) {
900
987
  var selectedDimension = selectDimensionFromHierarchy(indicator, filters);
901
- return (selectedDimension &&
902
- replaceDisplayCondition(selectedDimension, indicator.displayCondition));
988
+ return (selectedDimension && replaceDisplayCondition(selectedDimension, indicator.displayCondition));
903
989
  }
904
990
  return indicator;
905
991
  });
@@ -916,11 +1002,19 @@ function bindContentWithIndicator(outputs, indicator) {
916
1002
  * Массив объектов, каждый из которых содержит показатель и его контент
917
1003
  */
918
1004
  function bindContentsWithIndicators(outputs, indicators) {
919
- return compactMap(indicators, function (indicator) {
920
- return bindContentWithIndicator(outputs, indicator);
921
- });
1005
+ return compactMap(indicators, function (indicator) { return bindContentWithIndicator(outputs, indicator); });
922
1006
  }
923
1007
 
1008
+ /** Удалить из строки символы экранирования */
1009
+ function unescapeSpecialCharacters(str) {
1010
+ return str.replace(/\\(?!\\)/g, "").replace(/\\\\/g, "\\");
1011
+ }
1012
+
1013
+ var EUnitMode;
1014
+ (function (EUnitMode) {
1015
+ EUnitMode["PIXEL"] = "PIXEL";
1016
+ EUnitMode["PERCENT"] = "PERCENT";
1017
+ })(EUnitMode || (EUnitMode = {}));
924
1018
  var EControlType;
925
1019
  (function (EControlType) {
926
1020
  EControlType["inputNumber"] = "inputNumber";
@@ -934,22 +1028,28 @@ var EControlType;
934
1028
  EControlType["typedFormula"] = "typedFormula";
935
1029
  EControlType["inputRange"] = "inputRange";
936
1030
  EControlType["colorPicker"] = "colorPicker";
937
- /** @deprecated - удалится в ближайшее время */
938
- EControlType["filterMode"] = "filterMode";
939
1031
  EControlType["displayCondition"] = "displayCondition";
940
1032
  EControlType["eventsColor"] = "eventsColor";
941
1033
  EControlType["inputMarkdown"] = "inputMarkdown";
942
1034
  EControlType["filter"] = "filter";
943
1035
  EControlType["actionOnClick"] = "actionOnClick";
1036
+ EControlType["eventsPicker"] = "eventsPicker";
1037
+ EControlType["size"] = "size";
944
1038
  })(EControlType || (EControlType = {}));
945
1039
 
946
- var ESortDirection;
947
- (function (ESortDirection) {
948
- ESortDirection["descend"] = "DESC";
949
- ESortDirection["ascend"] = "ASC";
950
- ESortDirection["ASC"] = "ascend";
951
- ESortDirection["DESC"] = "descend";
952
- })(ESortDirection || (ESortDirection = {}));
1040
+ var ESelectOptionTypes;
1041
+ (function (ESelectOptionTypes) {
1042
+ ESelectOptionTypes["DIVIDER"] = "DIVIDER";
1043
+ ESelectOptionTypes["SYSTEM"] = "SYSTEM";
1044
+ ESelectOptionTypes["GROUP"] = "GROUP";
1045
+ ESelectOptionTypes["BRANCH"] = "BRANCH";
1046
+ ESelectOptionTypes["LEAF"] = "LEAF";
1047
+ })(ESelectOptionTypes || (ESelectOptionTypes = {}));
1048
+ var ECustomSelectTemplates;
1049
+ (function (ECustomSelectTemplates) {
1050
+ ECustomSelectTemplates["FORMULA"] = "FORMULA";
1051
+ ECustomSelectTemplates["DIMENSION_GROUPS"] = "DIMENSION_GROUPS";
1052
+ })(ECustomSelectTemplates || (ECustomSelectTemplates = {}));
953
1053
 
954
1054
  var findFilterByFormula = function (filters, formula) {
955
1055
  var _a;
@@ -1045,4 +1145,45 @@ var getLocalizedText = function (language, locObj, props) {
1045
1145
  return localization.getLocalized(locObj, props);
1046
1146
  };
1047
1147
 
1048
- export { ECalculatorFilterMethods, EColorMode, EControlType, EDbType, EDimensionTemplateNames, EDisplayConditionMode, EDurationUnit, EEventMeasureTemplateNames, EFormatTypes, EFormattingPresets, EFormulaFilterFieldKeys, EIndicatorType, ELastTimeUnit, EMeasureTemplateNames, EProcessFilterNames, ESimpleDataType, ESortDirection, ESortingValueModes, ETransitionMeasureTemplateNames, EWidgetActionInputMode, EWidgetFilterMode, EWidgetIndicatorType, EWidgetIndicatorValueModes, bindContentWithIndicator, bindContentsWithIndicators, checkDisplayCondition, dimensionTemplateFormulas, escapeSpecialCharacters, eventMeasureTemplateFormulas, fillTemplateString, formulaFilterMethods, generateColumnFormula, getDimensionFormula, getDisplayConditionFormula, getEventMeasureFormula, getLocalizedText, getMeasureFormula, getTransitionMeasureFormula, isActionValid, isHierarchy, mapDimensionsToInputs, mapEventMeasuresToInputs, mapFormulaFilterToCalculatorInput, mapFormulaFiltersToInputs, mapMeasuresToInputs, mapSortingToInputs, mapTransitionMeasuresToInputs, mapVariablesToInputs, measureTemplateFormulas, prepareValuesForSql, replaceDisplayCondition, replaceFiltersBySelection, replaceHierarchiesWithDimensions, selectDimensionFromHierarchy, transitionMeasureTemplateFormulas, updateDefaultModeSelection, updateMultiModeSelection, updateSingleModeSelection };
1148
+ var EColorMode;
1149
+ (function (EColorMode) {
1150
+ /** Окрашивание отключено */
1151
+ EColorMode["DISABLED"] = "DISABLED";
1152
+ /** Цвет каждого значения вычисляется по формуле */
1153
+ EColorMode["FORMULA"] = "FORMULA";
1154
+ /** Один цвет для всех значений */
1155
+ EColorMode["BASE"] = "BASE";
1156
+ /** Окрашивание каждого значения по градиенту относительно минимального и максимального значений */
1157
+ EColorMode["GRADIENT"] = "GRADIENT";
1158
+ /** Использовать автоматический цвет: по умолчанию определяется порядковым номером показателя */
1159
+ EColorMode["AUTO"] = "AUTO";
1160
+ /** Использовать цвет из правила отображения (в правиле отображения рекурсивно определен цвет) */
1161
+ EColorMode["RULE"] = "RULE";
1162
+ /** Задать цвет конкретным значениям разреза */
1163
+ EColorMode["VALUES"] = "VALUES";
1164
+ /** Задать цвет конкретным значениям общего разреза. Режим используется только для настроек правила отображения */
1165
+ EColorMode["BY_DIMENSION"] = "BY_DIMENSION";
1166
+ })(EColorMode || (EColorMode = {}));
1167
+ var getRuleColor = function (ruleFormula, globalContext) {
1168
+ var _a, _b;
1169
+ var link = parseIndicatorLink(ruleFormula);
1170
+ if (!link) {
1171
+ return;
1172
+ }
1173
+ var _c = link.scopeName, scopeName = _c === void 0 ? null : _c, ruleName = link.indicatorName;
1174
+ var rulesByScope = isNil(scopeName)
1175
+ ? globalContext.reportDisplayRules
1176
+ : (_a = globalContext.workspaceDisplayRules) === null || _a === void 0 ? void 0 : _a.get(scopeName);
1177
+ return (_b = rulesByScope === null || rulesByScope === void 0 ? void 0 : rulesByScope.get(ruleName)) === null || _b === void 0 ? void 0 : _b.color;
1178
+ };
1179
+ var isValidColor = function (color, globalContext) {
1180
+ if (color.mode === EColorMode.RULE) {
1181
+ return !color.formula || Boolean(getRuleColor(color.formula, globalContext));
1182
+ }
1183
+ if (color.mode === EColorMode.VALUES) {
1184
+ return color.items.every(function (item) { return isValidColor(item.color, globalContext); });
1185
+ }
1186
+ return true;
1187
+ };
1188
+
1189
+ export { EActionTypes, ECalculatorFilterMethods, EColorMode, EControlType, ECustomSelectTemplates, EDbType, EDimensionTemplateNames, EDisplayConditionMode, EDrawerPlacement, EDurationUnit, EEventMeasureTemplateNames, EFontWeight, EFormatTypes, EFormattingPresets, EFormulaFilterFieldKeys, EIndicatorType, ELastTimeUnit, EMarkdownDisplayMode, EMeasureTemplateNames, EProcessFilterNames, ESelectOptionTypes, ESimpleDataType, ESortDirection, ESortingValueModes, ETransitionMeasureTemplateNames, EUnitMode, EViewMode, EViewOpenIn, EWidgetActionInputMethod, EWidgetFilterMode, EWidgetIndicatorType, EWidgetIndicatorValueModes, bindContentWithIndicator, bindContentsWithIndicators, checkDisplayCondition, dashboardLinkRegExp, dimensionTemplateFormulas, escapeSpecialCharacters, eventMeasureTemplateFormulas, fillTemplateString, formulaFilterMethods, generateColumnFormula, getDimensionFormula, getDisplayConditionFormula, getEventMeasureFormula, getLocalizedText, getMeasureFormula, getRuleColor, getTransitionMeasureFormula, isDimensionsHierarchy, isExecuteScriptActionValid, isFormulaFilterValue, isValidColor, linkNameRegExp, mapDimensionsToInputs, mapEventMeasuresToInputs, mapFormulaFilterToCalculatorInput, mapFormulaFiltersToInputs, mapMeasuresToInputs, mapSortingToInputs, mapTransitionMeasuresToInputs, measureTemplateFormulas, parseIndicatorLink, prepareValuesForSql, replaceDisplayCondition, replaceFiltersBySelection, replaceHierarchiesWithDimensions, selectDimensionFromHierarchy, transitionMeasureTemplateFormulas, unescapeSpecialCharacters, updateDefaultModeSelection, updateMultiModeSelection, updateSingleModeSelection, workspaceLinkRegExp };